调用存储过程出现的一个奇怪的问题

zhlinlin1982 2007-07-10 03:59:08
第一次在java中调用存储过程,代码如下:
CallableStatement proc = dbConn.prepareCall("{ call sp_parameters }");
proc.execute();
proc.close();
System.out.println("Loading parameters finished!");

存储过程sp_parameters中从一张表格中select出68条数据然后用游标一条一条做一些操作后插入到另外一张表格中。 奇怪的是每次都能选出68条数据,但是只能插入十几条,感觉是存储过程在执行过程中没执行完就被中断了,有什么办法能保证存储过程一定执行完再执行下面的语句吗?
...全文
232 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
IhaveGotYou 2007-07-12
  • 打赏
  • 举报
回复
你的存储过程都没有一个返回标记,怎么保证插入过程正确与否??
zhlinlin1982 2007-07-11
  • 打赏
  • 举报
回复
??? 如何打开prepared?
wq_quake 2007-07-11
  • 打赏
  • 举报
回复
存储过程的prepared打开了么。
zhlinlin1982 2007-07-11
  • 打赏
  • 举报
回复
另外发现 只要在 proc.close();上加一个断点,让它在 proc.excute();后停一会就能把所有数据导进去,所以觉得是存储过程没有执行完就被close了。

zhlinlin1982 2007-07-11
  • 打赏
  • 举报
回复
我要导入好多数据都要用到这个连接,这只是其中一个,需要在所有数据导完后在一起关掉连接。
shan1119 2007-07-11
  • 打赏
  • 举报
回复
没有异常的话,你把连接关闭放到异常处理里就更不对了.
zhlinlin1982 2007-07-11
  • 打赏
  • 举报
回复
试过了,没有异常,我是单机的,关键是手动调用存储过程一切正常的
shan1119 2007-07-11
  • 打赏
  • 举报
回复
csvOutputStmt.close();
dbStmt.close();
csvConnOutput.close();
dbConn.close();
csvConnMKTdata.close();
csvMKTdataStmt.close();
这些放到finally里,你看看是否捕获到异常.
shan1119 2007-07-11
  • 打赏
  • 举报
回复
你是单机的吗?不是的话会不会其他人改过数据了.如果数据没问题的话,那就很奇怪了.
zhlinlin1982 2007-07-11
  • 打赏
  • 举报
回复
我的存储过程要用到上面那些代码插入的数据的,不过在存储过程调用的时候我插过上面那些代码插入的数据是68条,然后存储过程join了这张有68条数据的表。手动调用存储过程是可以插入68条数据的
shan1119 2007-07-11
  • 打赏
  • 举报
回复
你把执行存储过程上边的那些代码注释掉,再调下看看.
shan1119 2007-07-11
  • 打赏
  • 举报
回复
跟上边的插入数据有关?会不会主键重复.
zhlinlin1982 2007-07-11
  • 打赏
  • 举报
回复
我调过存储过程了,如果在数据库中手动运行sp的话,68条数据都可以倒入到数据库的。就是在程序里调用的时候只能导入10几条。

源代码

public void Load_parameters() throws SQLException
{
int i;
String sql;
try
{

ResultSet results = csvMKTdataStmt.executeQuery("SELECT * FROM parameters");


while (results.next())
{
// PreparedStatement pstmt = myConn.prepareStatement(sql);
sql="insert into raw_parameters values (";
for(i=1;i<=8;i++)
{
if(i==1)
{
sql=sql+"'"+CovnertDealName(((String)results.getObject(i)))+"',";

}
else
sql=sql+"'"+results.getObject(i)+"',";

}
sql=sql+"'"+results.getObject(9)+"')";
PreparedStatement pstmt = dbConn.prepareStatement(sql);
pstmt.executeUpdate();
}

// clean up
results.close();

CallableStatement proc = dbConn.prepareCall("{ call sp_parameters }");
proc.execute();
proc.close();
System.out.println("Loading parameters finished!");
}
catch(Exception e)
{
System.out.println("Oops-> " + e);
csvOutputStmt.close();
dbStmt.close();
csvConnOutput.close();
dbConn.close();
csvConnMKTdata.close();
csvMKTdataStmt.close();
}
}
KingNE 2007-07-10
  • 打赏
  • 举报
回复
数据插入成功!
断掉没有回滚
奇伢 2007-07-10
  • 打赏
  • 举报
回复
存储过程有问题的话,先调试存储过程呀。

你这个调用很简单的,有数据插入,证明调用了存储过程。可能是存储过程出错了。

62,623

社区成员

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

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