jdbc之Statement和Preparement

  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     }
posted @ 2018-08-09 20:39  风中雨雨中路  阅读(2117)  评论(0编辑  收藏  举报