JDBC-Statement
java.sql包
定义
首先statment的意思是:声明说明,结算单,报单,这里在JDBC中通过创建的连接对象调用实例方法然后获取这个statement对象
Statement st=connection.createStatement();
这个对象的作用就像是,把要执行的sql语句放到一个结算单或者报单里,然后交给数据库服务器去执行这个sql语句,相当于一个传输工具
statement是一个接口,所以不能通过自身来创建一个实例化对象,需要使用连接的对象来调用实体方法来获取这个statement的对象
Connection的实例方法,createStatement方法来创建一个statement对象并返回,这个方法有无参也有有参
无参可以直接返回一个statement对象
有参可以根据需要来让statement对象具有更丰富的作用,比如滑块式的指针移动,都知道,statement'对象的调用一个executeQuery这样的方法是返回一个结果集,结果集的每一条数据都是通过一个指针来调用的,使用结果集实例的实例方法next()可以让指针指向下一条数据,当没有时就为false,这个指针起始位置是从第一行之前开始
实例方法
目前常用的实例方法就三种
execute()
executeQuery()执行查询,顾名思义,也就是执行一些查询操作,返回一个结果集回来
executeUpdate()执行更新,顾名思义,也就是执行一些更新操作,例如 增 删 改,创表删表,返回一个int类型的参数回来,这个参数代表SQL中的影响行数,也就是说如果是增那么增加几条就返回几条,但是如果是创表这种,那么返回的也会是0
结果集的指针操作
通过一个查询操作,返回的是一个结果集的对象,这个结果集的对象通过指针来一个一个返回结果集中的每一行数据,在默认情况下这个指针只能是从开头的前面位置依次向下移动。可以通过创建createStatement传入一个resultSetType变量来让指针进行变化,ResultSet中有常量 TYPE_SCROLL_INSENSITIVE,把这个常量传入createStatement方法中,让ResultSet的指针可以进行变换
ResultSet实例方法
next();指针后移,如果此位置没有数据那么返回false
previous();指针前移,如果此位置没有数据那么返回fasle
absolute();设置指针绝对位置,结果集的下标从1开始,传参是多少就从多少作为指针的位置
beforFirst();设置指针位置到第一条数据之前
afterLast();设置指针位置到最后一条数据之后
子接口PreparStatement
表示预编译的SQL语句的对象,使用PreparStatement可以让sql语句中出现占位符“?”一个问号代表的是一个参数,就像方法传参的方式一样使用PreparStatement可以先进行预编译sql语句,然后把需要的传入的参数传入即可形成一个完整的sql语句然后进行数据库执行
注意:这里放置的占位符,需要使用具体的值区替换,使用setXXX()方法来设置每个占位符的值,set(位置,值),这个方法里的位置参数,也就是?的位置,从1开始从左到右的?配对
优点
1.更好的封装
2.更好的多态
3.放置黑客的攻击
4.高效的执行,只需要传入参数执行,不需要多次来回传入执行
5.可批量指向DML语句
Connection conn=DriverManager.getConnection();
sql="INSERT INTO t_staff ( id , name , gender , hiredate ) VALUES (?,?,?,?)" ;
PreparedStatement pst=conn.prepareStatement(sql);
ps.setInt(1,1001);
ps.setString(2,"悟空");
ps.addBatch();//添加批处理的sql语句
ps.setInt(1,1002);
ps.setString(2,"悟能");
ps.addBatch(); //添加批处理的sql语句
ps.setInt(1,1003);
ps.setString(2,"悟净");
ps.addBatch();//添加批处理的sql语句
int[] counts=ps.executeBatch();//执行批处理操作
System.out.println(Arrays.toString( counts ));//返回一个影响行数的数组
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)