在PreparedStatement.executeBatch()時出錯﹐如何獲得出錯的SQL句子

foreveriu 2004-03-04 03:01:37
代碼如下
-------------------------------------------------
for (int i = 0; i < list.size(); i++) {
...
sql = "...";
stmt.addBatch(sql);
}
stmt.executeBatch();
-------------------------------------------------

在run stmt.executeBatch()時﹐發生了異常﹐這時想得到引發異常的那條Sql句子﹐不知是否可行﹖
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
####Statement和PreparedStatement - PreparedStatement预编译的SQL执行对象 1. 可以避免SQL注入 因为在编译的时候已经把SQL的逻辑固定,不会因为替换进去的内容改变逻辑 2. 如果SQL中涉及变量 相比Statement的字符串拼接的方式,代码可读性提高,并且不容易出错。 3. 如果涉及批量执行多条SQL时 使用PreparedStatement执行效率较高 - 如果SQL中没有变量用Statement 有变量用PreparedStatement ###批量操作 - Statement批量操作: statement.addBatch(sql1); statement.addBatch(sql2); statement.addBatch(sql3); //执行批量操作 statement.executeBatch(); - PreparedStatement批量操作: statement = connection.prepareStatement(sql); for (int i = 0; i < 100; i++) { statement.setString(1, "name"+i); statement.setString(2, "admin"+i); //添加到批量操作 statement.addBatch(); if(i ==0){ //执行批量操作 statement.executeBatch(); //清空执行过的SQL statement.clearBatch(); } } ####事务 1. 开启和关闭自动提交 connection.setAutoCommit(false/true); 2. 提交事务 connection.commit(); 3. 回滚 connection.rollback(); - 实现转账: 超人 500 蝙蝠侠 5000 蝙蝠侠给超人转2000 执行第一次成功 执行第二次成功 执行第三次失败 提示余额不足 并且回滚 create table jdbc_person(id int,name varchar(10),money int); insert into jdbc_person values(1,'超人',500),(2,'蝙蝠侠',5000); - 代码参见Demo08.java ###获取自增主键的值 create table team(id int primary key auto_increment,name varchar(10)); create table player(id int primary key auto_increment,name varchar(10),tid int); - 代码参见 Demo09.java ###元数据 - 元数据指 数据库和表的相关信息 - 代码参见 Demo10.java

67,512

社区成员

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

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