关于jdbc的一概小细节(二)

首先声明,java新手,最近新学的jdbc,感觉细节众多,琐碎每次忘记都需要去查,就自己写篇写点东西用来记录一下,方便自己查阅,也有在网上引经据典的内容,如有侵权,烦请联系,立刻删除,小小新手,如有错误敢情看官不吝斧正。

1.关于Statement与PreparedStatement的比较

Statement:(1)产生方式:Connection.createStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一般将SQL语句放在executeUpdate()中

代码示例:

              Class.forName(driver);
              //与数据库建立连接
              conn= DriverManager.getConnection(url,username,password);
              //发送SQL语句
              statement=conn.createStatement();
              //插入数据
              String sql="insert into user(username,password) values('114','1234')";
              //修改数据
              //String sql="update user set password='1232' where id=2"
              //删除数据
              //String sql= "delete from user where id=2";
              //sql语句结果,一般进行 增删改 的SQL语句用excuteUpdate
              int count=statement.executeUpdate(sql);
              if(count>0){
                  System.out.println("操作成功");
              }else{
                  System.out.println("操作失败");
              }

PreparedStatement:(1)产生方式:Connection.prepareStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一系列SetXXX方法(5)将SQL放在Connection.PrepareStatement(SQL)(6)需要预编译

代码示例:

    public List<Student> findAll() {

        List<Student> students = new ArrayList<>();
        Student stu = new Student();
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;

        conn = JDBCUtils.getConnection();
        String sql = "select student_id, student_name, sex, class_id from t_student";
        try {
            pstm = conn.prepareStatement(sql);
            rs = pstm.executeQuery();
            while(rs.next()){
//                stu.setStudentId(rs.getString("student_id"));
//                stu.setStudentName(rs.getString("student_name"));
//                stu.setSex(rs.getString("sex"));
//                stu.setClassId(rs.getString("class_id"));
                String studentId = rs.getString("student_id");
                String studentName = rs.getString("student_name");
                String Sex = rs.getString("sex");
                String classId = rs.getString("class_id");

                students.add(new Student(studentId,studentName,Sex,classId));
                //students.add(stu);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return students;
    }

查看PreparedStatement的源码 ,可知PreparedStatement继承Statement,Statement里有的方法PreparedStatement都有,但是PreparedStatement还有很多SetXXX方法

三、PreparedStatement较Statement的优势

(1)编码更加简洁灵活:在PreparedStatement中SQL语句后的查询条件,插入的值可以用占位符(?)来表示,不用像Statement一样写具体的值,只需要调用PreparedStatement中的SetXXX方法赋值即可。

(2)提高性能:如果要执行一条SQL语句100回,Statement需要connection,createStatement(sql)语句编译SQL100次,PreparedStatemnet只需要编译SQL语句一回(即connection.PreparedStatement(sql)),重复执行100次preparedStatement.executeQuery();减少编译SQL次数,提高性能。

(3)安全性高,可以有效防止SQL注入的风险:Statement存在SQL注入的风险,PreparedStatement可以防止SQL注入的风险。

2.关于ResultSet的具体细节

哈哈哈,这个问题有点复杂,可以参照

ResultSet 状态详解_jackyechina的专栏-CSDN博客
ResultSet用法集锦_小菜鸟的博客-CSDN博客_python resultset

感谢博主大大!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值