錯誤筆記:寫項目時用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();
		}	
		//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();
	}
插入成功!

記錄一下~~~~微笑

發佈了30 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章