错误笔记:写项目时用PreparedStatement向数据库中插入数据报游标不足错误

来源:互联网 发布:list转换成byte数组 编辑:程序博客网 时间:2024/05/18 02:47

今天在写一个电信宽带运营支撑系统时,报了一个游标不足的错误,一脸蒙,代码是这样:

public void saveToDB(Collection<BIDR> arg0) throws Exception {Connection conn = ConnectionFaction.getConnection();//conn.setAutoCommit(false);//int num=0;for(BIDR b:arg0) {//num++;int i = new Date(b.getLogin_date().getTime()).getDate();System.out.println(i);String sql="insert into t_detail_"+i+" values(?,?,?,?,?,?)";PreparedStatement prs = conn.prepareStatement(sql);prs.setString(1, b.getAAA_login_name());prs.setString(2, b.getLogin_ip());prs.setTimestamp(3, b.getLogin_date());prs.setTimestamp(4, b.getLogout_date());prs.setString(5, b.getNAS_ip());prs.setInt(6, b.getTime_deration());prs.execute();}//conn.commit();}
很简单的使用jdbc向数据库中插入数据的语句,为什么会报游标不足的错误呢?


想了好久,发现以前写preparedStatement时都是在循环外建的对象,这次是在for循环内,因为特殊需要,那么可能是preparedStatement对象没有关闭导致的吗?

于是在每次执行玩sql语句后,都关闭以下preparedStatement。

public void saveToDB(Collection<BIDR> arg0) throws Exception {Connection conn = ConnectionFaction.getConnection();//conn.setAutoCommit(false);//int num=0;for(BIDR b:arg0) {//num++;int i = new Date(b.getLogin_date().getTime()).getDate();System.out.println(i);String sql="insert into t_detail_"+i+" values(?,?,?,?,?,?)";PreparedStatement prs = conn.prepareStatement(sql);prs.setString(1, b.getAAA_login_name());prs.setString(2, b.getLogin_ip());prs.setTimestamp(3, b.getLogin_date());prs.setTimestamp(4, b.getLogout_date());prs.setString(5, b.getNAS_ip());prs.setInt(6, b.getTime_deration());prs.execute();prs.close();}
插入成功!

记录一下~~~~微笑

阅读全文
0 0
原创粉丝点击