JAVA statement 与 PreparedStatemet区别及应用

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语句注入的风险




总结:在使用固定SQL语句时可使用Statement进行执行,在使用参数查询时,建议使用 PreparedStatement进行执行,减少SQL注入风险。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值