Java在向oracle数据库存储数据时报ORA-01000: maximum open cursors exceeded

nichilemaworld 2015-01-20 12:33:56
public class CsvUtil {
public void toDatabase(String localFile){
DBHelper dh = new DBHelper();
try{
BufferedReader reader = new BufferedReader(new FileReader(localFile));//换成你的文件名
reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉
String line = null;
while((line=reader.readLine())!=null){
line=reader.readLine();
String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
int a = Integer.parseInt(item[0]);//第一列为number,所以用个int替换下String
String sql = "insert into TWOGCELL_20150110(AA,BB,CC,DD,EE,FF,GG,HH,II,JJ,KK,LL,MM,NN,OO,PP,QQ,RR,SS,TT,UU,VV,WW,XX,YY,ZZ,"
+ "AAAA,AABB,AACC,AADD,AAEE,AAFF,AAGG,AAHH,AAII,AAJJ,AAKK,AALL,AAMM)"
+ "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
int n = dh.execOthers(sql,a,item[1],item[2],item[3],item[4],item[5],item[6],item[7],item[8],item[9],item[10],item[11],item[12],item[13],item[14]
,item[15],item[16],item[17],item[18],item[19],item[20],item[21],item[22],item[23],item[24],item[25],item[26],item[27],item[28],item[29],item[30]
,item[31],item[32],item[33],item[34],item[35],item[36],item[37],item[38]);
}
reader.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}

}

这是代码,我是要实现从csv文件导出数据并存入oracle数据库,请大神看看为什么会报错ORA-01000: maximum open cursors exceeded
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
邹邹wl 2015-01-20
  • 打赏
  • 举报
回复
首先:
 while((line=reader.readLine())!=null){
                line=reader.readLine();
这里第二个读取应该注释掉,否则读取的信息只有一半。 其次: 麻烦把DBHelper类发出来看看
nichilemaworld 2015-01-20
  • 打赏
  • 举报
回复
引用 2 楼 z345434645 的回复:
你的execOthers这里面每次JDBC连接相关的都关闭了吗,conn.createStatement()和conn.prepareStatement()的时候,都是相当于在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
感谢你的回答,我解决了,就是你说的这个问题,我把DBHelper类里的方法改了一下,每进行依次循环后都关闭prepareStatement一次,就好了。谢谢!
邹邹wl 2015-01-20
  • 打赏
  • 举报
回复
你的execOthers这里面每次JDBC连接相关的都关闭了吗,conn.createStatement()和conn.prepareStatement()的时候,都是相当于在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。

62,628

社区成员

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

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