JDBC

Statement

作用:

执行SQL语句

Int executeUpdate(sql); 执行DMLDDL语句

返回值: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语句,用以达到执行代码对服务器进行攻击的方法

  1. 获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代

String sql=select * from user where usename=?and password =?

//通过Connection对象获取,并传入对应的SQLyuju

PreparedStatement pstmt=conn.prepareStatement(sql);

  1. 设置参数值

PreparedStatement对象: setXxx(参数1,参数2):给?赋值

Xxx:数据类型;如 setint(参数1,参数2)

参数:

参数1:?的位置编号,从1开始

参数2:?的值

  1. 执行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好处:

  1. 预编译SQL,性能更高
  2. 防止SQL注入:将敏感字符进行转义

 

 

  1. PreparedStatement预编译功能开启 useServerPrepStmts=true
  2. 配置MySQL执行日志(重庆mysql后生效)

 

PreparedStatement原理:

  1. 在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)
  2. 执行时就不用再进行这些步骤了,速度更快
  3. 如果sql模板一样,则只需要进行一次检查,编译
posted @ 2022-10-23 21:27  代不动码  阅读(23)  评论(0)    收藏  举报