Statement 接口下有三种 Statement 类
Statement 接口 用于执行静态SQL语句 并返回他所生成结果的对象
1)Statement : 由createStatement创建,用于发送简单的SQL语句。(不带参数的)
2)PreparedStatement : 继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入。我们一般都用PreparedStatement.
3)CallableStatement :继承自PreparedStatement。由方法prePareCall创建,用于调用存储过程。
常用Statement方法:
·execute():运行语句,返回是否有结果集。
·executeQuery():运行select语句,返回ResultSet结果集。
·executeUpdate():运行insert/update/delete操作,返回更新的行数。
使用Statement:(conn为已创建的数据库连接)
//创建一个Statement
Statement smt = conn.createStatement();
//定义一个SQL语
String sql = "insert into javatest (字段1,字段2) values ('值1','值2')";
//执行一个SQL语句
smt.execute(sql);
//运行结束
System.out.println("执行结束");
//关闭连接
stm.close();
conn.close();
Statement 参数在平时 用于固定SQL语句执行,若不固定SQL语句只能采取拼字符串来生成SQL语句,这会使程序有SQL注入风险。
因此大部分都使用PreparedStatement参数进行传值查询
使用PreparedStatement:(conn为已创建的数据库连接):
//定义一个SQL语句 使用占位符? 进行占位
String sql = "insert into javatest (字段1,字段2) values (?,?)";
//创建PreparedStatemet并导入SQL语句
PreparedStatement ps = conn.PreparedStatemet(sql);
//添加占位符的字符串值 (参数索引(从1开始),值)
ps.setString(1,"值1");
//添加占位符的数值类型值
ps.setInt(2,10000);
//还可以使用不限制类型的setObject() 以及 时间类型setDate() 等
//提交执行
ps.execute();
//关闭连接
ps.close()
conn.close()
PreparedStatement大部分用于传参执行sql语句,能够有效避免SQL语句注入的风险