zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    LeetCode 第 193 场周赛
    LeetCode 每日一题 15. 三数之和
    LeetCode 每日一题 739. 每日温度
    [转]邹承鲁院士写他是如何读文献
    LeetCode 每日一题 面试题46. 把数字翻译成字符串
    LeetCode 每日一题 990. 等式方程的可满足性
    传说中编程界的龙书、虎书、鲸书、魔法书…… 指的都是哪些?
    LeetCode 每日一题 238. 除自身以外数组的乘积
    C++ 关键字 explicit
    LeetCode 每日一题 837. 新21点
  • 原文地址:https://www.cnblogs.com/lrxvx/p/9451626.html
Copyright © 2011-2022 走看看