1 Jdbc DML 操作 2 Statement:静态SQL操作 3 每次操作都会将sql语句提交到数据库执行一次,性能比较低 4 // 1.加载驱动程序 5 Class.forName(driverName); 6 // 2.获取数据库连接 7 Connection conn = DriverManager.getConnection(url, user, password); 8 // 3.构建SQL语句 9 String sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'abc','123456')"; 10 // 4.执行SQL语句 11 Statement sts = conn.createStatement(); 12 // 返回的结果是影响的行数 13 int count = sts.executeUpdate(sql); 14 System.out.println("影响的行数:" + count); 15 // 5.关闭资源 16 sts.close(); 17 conn.close(); 18 19 20 Jdbc DML 操作 21 PrepareStatement:动态sql操作 预编译操作 22 优点:性能比Statement高 23 Statement对象能做的操作Preparedstatement都能做 24 Preparedstatement能做的Statement不一定能做 25 通过PrepareStatement对象更新用户数据 26 execute:DDL操作 27 executeUpdate:DML操作 28 executeQuery:DQL操作 29 executeBatch:批量处理 一次性执行多条sql语句 30 31 // 1.加载驱动程序 32 Class.forName(driverName); 33 // 2.获取数据库的连接通道 34 Connection conn = DriverManager.getConnection(url, user, password); 35 // 3.构建SQL语句 36 String sql = "update t_user set password=? where userid=?"; 37 // 4.执行sql语句 38 // 获取Statement对象 39 PreparedStatement ps = conn.prepareStatement(sql); 40 ps.setString(1, "hehe"); 41 ps.setInt(2, 3); 42 int count = ps.executeUpdate(); 43 System.out.println("影响的行数:"+count); 44 // 关闭资源 45 ps.close(); 46 47 48 Jdbc查询: 49 // 1.加载驱动程序 50 Class.forName(driverName); 51 // 2.获取数据库连接通道 52 Connection conn = DriverManager.getConnection(url, user, password); 53 // 3.构建SQL语句 54 String sql = "select * from t_user order by userid"; 55 // 4.执行SQL语句获取查询结果 56 PreparedStatement ps = conn.prepareStatement(sql); 57 // 执行查询 ResultSet 类似于我们讲的游标 迭代器 58 ResultSet rs = ps.executeQuery();// 其实并没有获取到数据,而是指向了第一条数据之前 59 // 判断是否有下一条记录并把该记录保存到ResultSet对象中 60 while(rs.next()){// 每循环一次取出一条新的记录 61 //int id = rs.getInt("userid"); 62 int id = rs.getInt(1); // 通过列的下标取字段内容,从1开始 63 String userName = rs.getString("username"); 64 String userPassword = rs.getString("password"); 65 System.out.println(id+" "+userName+" "+userPassword); 66 } 67 // 5.关闭相关的资源 68 rs.close(); 69 ps.close(); 70 conn.close(); 71 72 73 批处理: 74 /** 75 * 通过Statement执行批处理操作 76 * 适用于执行多条不同的sql语句 77 * @throws Exception 78 */ 79 @Test 80 public void testStatementBatch() throws Exception { 81 conn = DbUtils.getConnection(); 82 Statement sts = conn.createStatement(); 83 sql1 = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'a','b')"; 84 sql2 = "update t_user set password='111' where userid=43"; 85 // 添加批处理的sql语句 86 sts.addBatch(sql1); 87 sts.addBatch(sql2); 88 sts.executeBatch(); 89 DbUtils.close(sts, conn); 90 91 } 92 93 /** 94 * 通过PreparedStatement对象执行批处理操作 95 * @throws Exception 96 * @throws ClassNotFoundException 97 */ 98 @Test 99 public void testPreparedStatement() throws Exception { 100 conn = DbUtils.getConnection(); 101 sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,?,?)"; 102 PreparedStatement ps = conn.prepareStatement(sql); 103 /*ps.setString(1, "a1"); 104 ps.setString(2, "b1"); 105 ps.addBatch(); 106 ps.setString(1, "a2"); 107 ps.setString(2, "b3"); 108 ps.addBatch();*/ 109 for(int i = 0 ; i < 10 ; i++){ 110 ps.setString(1, "a"+i); 111 ps.setString(2, "b"+i); 112 ps.addBatch(); 113 } 114 115 ps.executeBatch(); 116 DbUtils.close(ps, conn); 117 }