jdbc三种常见用法
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBC_Test { // 创建静态全局变量 static Connection conn; static Statement st; public static void main(String[] args) { insert(); //插入添加记录 update(); //更新记录数据 delete(); //删除记录 query(); //查询记录并显示 } /* 插入数据记录,并输出插入的数据记录数*/ public static void insert() { conn = getConnection(); // 首先要获取连接,即连接到数据库 try { String sql = "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 32, 'M', 'china','Personnel','3','3000')"; // 插入数据的sql语句 st = (Statement) conn.createStatement(); // 创建用于执行静态sql语句的Statement对象 int count = st.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数 System.out.println("向staff表中插入 " + count + " 条数据"); //输出插入操作的处理结果 conn.close(); //关闭数据库连接 } catch (SQLException e) { System.out.println("插入数据失败" + e.getMessage()); } } /* 更新符合要求的记录,并返回更新的记录数目*/ public static void update() { conn = getConnection(); //同样先要获取连接,即连接到数据库 try { String sql = "update staff set wage='2200' where name = 'lucy'";// 更新数据的sql语句 st = (Statement) conn.createStatement(); //创建用于执行静态sql语句的Statement对象,st属局部变量 int count = st.executeUpdate(sql);// 执行更新操作的sql语句,返回更新数据的个数 System.out.println("staff表中更新 " + count + " 条数据"); //输出更新操作的处理结果 conn.close(); //关闭数据库连接 } catch (SQLException e) { System.out.println("更新数据失败"); } } /* 查询数据库,输出符合要求的记录的情况*/ public static void query() { conn = getConnection(); //同样先要获取连接,即连接到数据库 try { String sql = "select * from staff"; // 查询数据的sql语句 st = (Statement) conn.createStatement(); //创建用于执行静态sql语句的Statement对象,st属局部变量 ResultSet rs = st.executeQuery(sql); //执行sql查询语句,返回查询数据的结果集 System.out.println("最后的查询结果为:"); while (rs.next()) { // 判断是否还有下一个数据 // 根据字段名获取相应的值 String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); String address = rs.getString("address"); String depart = rs.getString("depart"); String worklen = rs.getString("worklen"); String wage = rs.getString("wage"); //输出查到的记录的各个字段的值 System.out.println(name + " " + age + " " + sex + " " + address + " " + depart + " " + worklen + " " + wage); } conn.close(); //关闭数据库连接 } catch (SQLException e) { System.out.println("查询数据失败"); } } /* 删除符合要求的记录,输出情况*/ public static void delete() { conn = getConnection(); //同样先要获取连接,即连接到数据库 try { String sql = "delete from staff where name = 'lili'";// 删除数据的sql语句 st = (Statement) conn.createStatement(); //创建用于执行静态sql语句的Statement对象,st属局部变量 int count = st.executeUpdate(sql);// 执行sql删除语句,返回删除数据的数量 System.out.println("staff表中删除 " + count + " 条数据\n"); //输出删除操作的处理结果 conn.close(); //关闭数据库连接 } catch (SQLException e) { System.out.println("删除数据失败"); } } /* 获取数据库连接的函数*/ public static Connection getConnection() { Connection con = null; //创建用于连接数据库的Connection对象 try { Class.forName("com.mysql.jdbc.Driver");// 加载Mysql数据驱动 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root");// 创建数据连接 } catch (Exception e) { System.out.println("数据库连接失败" + e.getMessage()); } return con; //返回所建立的数据库连接 } }
preparestatement
package com.serein.jdbc; import java.sql.*; public class preparedStatemetTest { public static void main(String[] args) { //检查命令行中是否够7个参数 if(args.length != 7) { System.out.println("Parameter Error! Please Input Again!"); System.exit(-1); } //程序获取运行栈里的7个参数值 String name = args[0]; int age = 0; try { age = Integer.parseInt(args[1]); } catch (NumberFormatException e) { System.out.println("Parameter Error! Age should be Number Format!"); System.exit(-1); } String sex = args[2]; String address = args[3]; String depart = args[4]; int worklen = 0; try { worklen = Integer.parseInt(args[5]); } catch (NumberFormatException e) { System.out.println("Parameter Error! Worklen should be Number Format!"); System.exit(-1); } int wage = 0; try { wage = Integer.parseInt(args[6]); } catch (NumberFormatException e) { System.out.println("Parameter Error! Wage should be Number Format!"); System.exit(-1); } //创建PreparedStatement对象 PreparedStatement pstmt = null; //创建连接对象 Connection conn = null; //连接数据库,并插入数据 try { //加载MySQL驱动实例,提供了两种方法,是等价的 Class.forName("com.mysql.jdbc.Driver"); //new oracle.jdbc.driver.OracleDriver(); //建立连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myuser", "root", "root"); //使用PreparedStatement对象里来构建并执行SQL语句,7个问号代表7个字段预先要保留的值 pstmt = conn.prepareStatement("INSERT INTO staff(name, age, sex,address, depart, worklen,wage) VALUES (?, ?, ?, ?, ?, ?, ?)"); //通过PreparedStatement对象里的set方法去设置插入的具体数值 pstmt.setString(1, name); pstmt.setInt(2, age); pstmt.setString(3, sex); pstmt.setString(4,address ); pstmt.setString(5, depart); pstmt.setInt(6, worklen); pstmt.setInt(7, wage); pstmt.executeUpdate(); //插入成功提示 System.out.print("成功插入一条数据记录!"); //捕获驱动加载失败异常 } catch (ClassNotFoundException e) { e.printStackTrace(); //捕获SQL语句执行失败异常 } catch (SQLException e) { e.printStackTrace(); //恢复变量初始值 } finally { try { if(pstmt != null) { pstmt.close(); pstmt = null; } if(conn != null) { conn.close(); conn = null; } //捕获SQL异常 } catch (SQLException e) { e.printStackTrace(); } } } }
callablestatement
package com.serein.jdbc; import java.sql.*; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type; public class procedureTest { // 数据库连接 public static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载Mysql数据驱动 conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root"); // 创建数据连接 } catch (Exception e) { System.out.println("数据库连接失败"); } return conn; } // 列出数据库中所有的存储过程名 public static void GET_AllProName(Connection con) { try { DatabaseMetaData md = con.getMetaData(); // 获得数据库的元数据 ResultSet resultSet = md.getProcedures(null, null, "%"); // 获得所有的存储过程的描述 System.out.println("数据库现有的存储过程名为:"); // 显示存储过程名,位于结果集的第三个字段 while (resultSet.next()) { String procName = resultSet.getString(3); System.out.print(procName + "\n"); } System.out.println(); } catch (SQLException e) { e.printStackTrace(); } } //*/ // 调用存储过程 public static void CALL_Procedure(Connection con) throws Exception { CallableStatement cst = null; // CallableStatement是Statement的子类 System.out.println("开始执行存储过程"); try { // 调用无参数的存储过程 cst = con.prepareCall("{call addStaff(?,?,?,?,?,?,?,?)}"); //8个?号作占位符 //设置输入的参数值 cst.setString(1, "Tina"); cst.setInt(2, 23); cst.setString(3, "W"); cst.setString(4, "Shanghai"); cst.setString(5, "Personnel"); cst.setInt(6, 1); cst.setInt(7, 3000); cst.registerOutParameter(8, Type.INTERNAL); //注册输出参数类型 cst.execute(); //执行 int insertID = cst.getInt(8); //获取输出的参数值 System.out.println("The last staff ID is :" + insertID); //将输入的参数打印出来 } catch (SQLException e) { e.printStackTrace(); } finally { cst.close(); } System.out.println("存储过程执行结束"); } public static void main(String[] args) throws Exception{ Connection conn = null; try { conn = getConnection(); // 获得数据库连接 GET_AllProName(conn); // 列出数据库的所有存储过程名 CALL_Procedure(conn); // 调用存储过程 } catch (Exception e1) { throw e1; } finally { conn.close(); // 关闭数据库连接 } } }