JDBC
Statement
作用:
执行SQL语句
Int executeUpdate(sql); 执行DML、DDL语句
返回值:1.DML语句影响的行数2.DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql);执行DQL语句
返回值:ResultSet 结果集对象
ResultSet结果集对象
作用:封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql);执行DQL语句,返回ResultSet对象
获取查询结果
Boolean next(); 1.将光标从当前位置向前移动一行 2.判断当前是否为有效行
返回值:
True:有效行,当前行有数据
False:无效行,当前行没有数据
Xxx getXxx(参数):获取数据
Xxx:数据类型 如 int getint(参数);String getString(参数)
参数:
Int:列的编号,从1开始
String:列的名称
String sql3="select * from 课程表";
ResultSet rs=stmt.executeQuery(sql3);
List<课程表> list=new ArrayList<>();
while(rs.next())
{
课程表 kcb=new 课程表();
int js=rs.getInt(1);
String x1=rs.getString(2);
String x2=rs.getString(3);
String x3=rs.getString(4);
String x4=rs.getString(5);
String x5=rs.getString(6);
kcb.setJs(js);
kcb.setX1(x1);
kcb.setX2(x2);
kcb.setX3(x3);
kcb.setX4(x4);
kcb.setX5(x5);
list.add(kcb);
}
System.out.println(list);
rs.close();
PreparedStatement
作用:预编译SQL语句并执行,预防SQL注入问题
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法
- 获取PreparedStatement对象
//SQL语句中的参数值,使用?占位符替代
String sql=”select * from user where usename=?and password =?”
//通过Connection对象获取,并传入对应的SQLyuju
PreparedStatement pstmt=conn.prepareStatement(sql);
- 设置参数值
PreparedStatement对象: setXxx(参数1,参数2):给?赋值
Xxx:数据类型;如 setint(参数1,参数2)
参数:
参数1:?的位置编号,从1开始
参数2:?的值
- 执行SQL
ExecuteUpdate();/executeQuery();:不需要再传递sql
int a;
String b;
String sql4="select * from 课程表 where 节数=?and星期一=?";
PreparedStatement pstmt =conn.prepareStatement(sql4);
pstmt.setInt(1,a);
pstmt.setString(2,b);
ResultSet rs2=pstmt.executeQuery();
pstmt.close();
rs2.close();
PreparedStatement好处:
- 预编译SQL,性能更高
- 防止SQL注入:将敏感字符进行转义
- PreparedStatement预编译功能开启 useServerPrepStmts=true
- 配置MySQL执行日志(重庆mysql后生效)
PreparedStatement原理:
- 在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)
- 执行时就不用再进行这些步骤了,速度更快
- 如果sql模板一样,则只需要进行一次检查,编译

浙公网安备 33010602011771号