JDBC执行SQL语句出错

sky123123 2010-09-21 04:35:45
我用JDBC执行一条update语句时,能够成功执行,

可是我执行两条或者多条update语句时却出现错误咯


1、sql = "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1"; // 正确

2. sql = "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1; update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2;"; // 出错


错误信息:
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2972)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2902)
at com.mysql.jdbc.Statement.execute(Statement.java:529)

哪位高手能帮忙解释一下啊 谢谢咯 先。。
...全文
905 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcy9979420 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 flagiris 的回复:]

Java code

Statement stmt = null;
String[] sqls = {
"update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1",
"update monitor_id set lasti……
[/Quote]

+1
waveBreaking 2010-09-28
  • 打赏
  • 举报
回复
这样是不可用的

executeUpdate()是会返回一个int类型的数据来表示插入成功或失败的

一个sql里面放了两个insert,那么如果一个插入成功但是另一个插入失败的话,方法该如果反馈回来呢?
跑跑鱼 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gbohao 的回复:]
sql批处理文件里可以使用“;”来分开两条语句;

但是在此处的执行语句里,不可以使用分号
PreparedStatement 或 Statement 应该都是一句句执行,不可以进行批处理的

个人理解,希望有帮助
多多交流
[/Quote]
ding ding
whut_lcy 2010-09-28
  • 打赏
  • 举报
回复
还有搞日文的。。。
hnnxzhoujia 2010-09-27
  • 打赏
  • 举报
回复
string sql1 = "";
string sql2 = "";
蒙奇D路飞 2010-09-25
  • 打赏
  • 举报
回复
monitor_id 这个是表名吗 咋看着怎么别扭 楼主要注意代码规范啊 别人读估计是列名
DarkKnightLeon 2010-09-23
  • 打赏
  • 举报
回复
学习了
菖蒲老先生 2010-09-23
  • 打赏
  • 举报
回复

Statement stmt = null;
String[] sqls = {
"update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1",
"update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2"
};

for (int i = 0; i < sqls.length; i++) {
try {
stmt.addBatch(sqls[i]);
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
try {
stmt.executeBatch();
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
zxcv991 2010-09-23
  • 打赏
  • 举报
回复
挺有创意
jacky花园 2010-09-23
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 flagiris 的回复:]
Java code

Statement stmt = null;
String[] sqls = {
"update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1",
"update monitor_id set la……
[/Quote]

你执行一条sql后没有关闭就接着执行第二条,结果集也没有清空,貌似会出错吧
wzhw2008 2010-09-23
  • 打赏
  • 举报
回复
执行一条sql后要执行 preparedStatement.close()方法.
JavaBoyCaoJi 2010-09-23
  • 打赏
  • 举报
回复
用 batch
ETCentury 2010-09-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zph2254 的回复:]
sql = "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1;"+" update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2;"
[/Quote]

可以这么写么?
czmchen 2010-09-22
  • 打赏
  • 举报
回复
这样的语句用preparedstatement执行不过的,为什么preparedstatement要这样做呢?是为了安全,所以lz别这样写,这样写很容易被人家注入
RainOnly 2010-09-22
  • 打赏
  • 举报
回复
学习了...
willerce 2010-09-22
  • 打赏
  • 举报
回复
来学习,第一次看见这么写,有创意,不知道这样行得通么?
lxy15329 2010-09-22
  • 打赏
  • 举报
回复
领教了,第一次看见这么写的
lizhengguo992003 2010-09-22
  • 打赏
  • 举报
回复
有点迷惑

你在代码中也是这样写的?
“sql = "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1; update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2;";”
有换行?

如果按照我之前的错误来看呢···

你不要换行就对了···把这句sql写成一行。

  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sky123123 的回复:]

引用 6 楼 gbohao 的回复:
sql批处理文件里可以使用“;”来分开两条语句;

但是在此处的执行语句里,不可以使用分号
PreparedStatement 或 Statement 应该都是一句句执行,不可以进行批处理的

个人理解,希望有帮助
多多交流

如果我要是更新一千万条记录的话,是不是要向数据库发送一千万次sql语句哦 这样子的话。。。
[/Quote]

更新一千万条数据也不会是一条一条去更新的,一般 UPDATE 语句用于批量更新,比如说统一修改某些数据。
zhuyouyong 2010-09-21
  • 打赏
  • 举报
回复
sql语句可以链接来写?
加载更多回复(18)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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