java 里面的PrepareStatement如何多个不同类型sql语句使用事务

alan_219_2008 2011-02-10 04:14:40

String sql1="delete * from A where name=?";
String sql2="delete * from B where id=?";


怎么使用PrepareStatement 防注入的方法 并且 使用事务来处理?


connection=SQLHelper.getConnection();
connection.setAutoCommit(false);
preparedStatement=SQLHelper.getPrepareStatement(connection,sql1);
preparedStatement.setInt(1, name);
preparedStatement.executeUpdate();
preparedStatement=SQLHelper.getPrepareStatement(connection,sql2);
preparedStatement.setInt(1, id);
preparedStatement.executeUpdate();
connection.commit();


这样写是不是有问题?
另外 像这样的情况(多个不同类型的sql)能否用addBatch()来处理?
...全文
736 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
alan_219_2008 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ksqqxq 的回复:]

这个与addBatch()有关系吗?

如果想用,无非加个变量进行判断即可
[/Quote]

怎么说?
ETCentury 2011-02-15
  • 打赏
  • 举报
回复
这个与addBatch()有关系吗?

如果想用,无非加个变量进行判断即可
beowulf2005 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 alan_219_2008 的回复:]

引用 16 楼 villagehead 的回复:

为什么用了PrepareStatement还用
String sql1="delete * from A where name="+name;
呢?

good luck


用了PrepareStatement的话 肯定String sql1="delete * from A where name=?";

但我不知道我……
[/Quote]

对阿
alan_219_2008 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 villagehead 的回复:]

为什么用了PrepareStatement还用
String sql1="delete * from A where name="+name;
呢?

good luck
[/Quote]

用了PrepareStatement的话 肯定String sql1="delete * from A where name=?";

但我不知道我那样用PrepareStatement执行事务 对不对
villagehead 2011-02-14
  • 打赏
  • 举报
回复
为什么用了PrepareStatement还用
String sql1="delete * from A where name="+name;
呢?

good luck
alan_219_2008 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 villagehead 的回复:]

引用 10 楼 numb09 的回复:

你用了PreparedStatement就不怕注入了

事务跟PreparedStatement没什么关系,commit之前的多个操作(DML)算一个事务

你这样写应该可以


PreparedStatement不会遇到注入攻击,
lz所说的“拼接字符串”问题,具体是什么意思?
举个例子说明一下吧

关于事务,你这样写是可以的……
[/Quote]

String sql1="delete * from A where name=?";
String sql1="delete * from A where name="+name;



preparedStatement=SQLHelper.getPrepareStatement(connection,sql1);
SQLHelper里面就是 connection.getPrepareStatement(sql1)
villagehead 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 numb09 的回复:]

你用了PreparedStatement就不怕注入了

事务跟PreparedStatement没什么关系,commit之前的多个操作(DML)算一个事务

你这样写应该可以
[/Quote]

PreparedStatement不会遇到注入攻击,
lz所说的“拼接字符串”问题,具体是什么意思?
举个例子说明一下吧

关于事务,你这样写是可以的应该,
不行的话要看看那个SQLHelper里面是怎么写的

good luck
beowulf2005 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 alan_219_2008 的回复:]

再up一下 帮我看下我这样写啊对啊 拜托啦
[/Quote]

对阿
alan_219_2008 2011-02-12
  • 打赏
  • 举报
回复
再up一下 帮我看下我这样写啊对啊 拜托啦
alan_219_2008 2011-02-12
  • 打赏
  • 举报
回复
啊啊啊 火龙果人呢 帮忙看下啊啊
numb09 2011-02-10
  • 打赏
  • 举报
回复
你用了PreparedStatement就不怕注入了

事务跟PreparedStatement没什么关系,commit之前的多个操作(DML)算一个事务

你这样写应该可以
alan_219_2008 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wpffeihuwpf 的回复:]

PrepareStatement能防止SQL注入,批量时可以添加不同类型
[/Quote]

举个例子?不同类型的SQL
wpffeihuwpf 2011-02-10
  • 打赏
  • 举报
回复
PrepareStatement能防止SQL注入,批量时可以添加不同类型
handsome_huxiulei 2011-02-10
  • 打赏
  • 举报
回复
也不太会 哎 长时间没摸了 悲剧了
alan_219_2008 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 beowulf2005 的回复:]

PrepareStatement不是字符串拼接,不存在注入问题。

事务在JDBC connection 设。

或者根据数据库不同,直接用SQL.
START TRANSACTION for MySQL
BEGIN TRANSACTION for MS SQL Server
[/Quote]

我碰到的就是字符串拼接的问题啊
beowulf2005 2011-02-10
  • 打赏
  • 举报
回复
PrepareStatement不是字符串拼接,不存在注入问题。

事务在JDBC connection 设。

或者根据数据库不同,直接用SQL.
START TRANSACTION for MySQL
BEGIN TRANSACTION for MS SQL Server

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧