الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

خطأ عند استدعاء Resultset

بدأه mhewedy في 30 نوفمبر 2008 · 2 رد · 479 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه

عند تنفيذ الكود التالي يظهر لي رساله

SQLException : ResultSet object is closed

فما الحل في هذه الحاله

الكود :

DBConn.java

public class DBConn {


	private Connection createConnection()throws DBException{
	/*
code to return conn goes here
*/		
		return conn;
	}

	public ResultSet executeQuery (String queryText)throws DBException{

		ResultSet rs = null;
		Connection conn = null;
		Statement stmt = null;
		try{
			conn = createConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery (queryText);

		}catch (SQLException ex){
			//ex.printStackTrace();
			throw new DBException();
		}finally{
			try{
				if ( stmt != null)
					stmt.close();
				if ( conn != null)
					conn.close();
			}catch(SQLException ex){
				throw new DBException();
			}
		}

		return rs.clone();
	}
}

كود الفئه Test.java

public class Test {

	public static void main (String[] args)throws DBException, SQLException{

		DBConn dbconn = new DBConn();
		ResultSet rs = dbconn.executeQuery ("SELECT * FROM News");

		while ( rs.next()){
			System.out.println (rs.getString(1));
		}
	}
}

تم تعديل هذه المشاركة بواسطة {هويدي} في 30 نوفمبر 2008 في 11:28

#2
		
		ResultSet rs = null;
		Connection conn = null;
		Statement stmt = null;
		try{
			conn = createConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery (queryText);

اولا : أين التعريف الخاص بقاعدة البيانات . اي URL الخاص بمكان قاعدة البيانات

ثانياً : اين تعريف DriverManager الخاص بالـDriver الذي يربط الكود بقاعدة البيانات

اتبع الخطوات التالية في ربط قواعد البيانات

Connection c_tion = DriverManager.getConnection(url,UserName,Password);
Statement s_ment = c_tion.createStatement();
ResultSet r_set = s_ment.executeQuery("SELECT * FROM News");

تم تعديل هذه المشاركة بواسطة ابو سعود الفرنسي في 30 نوفمبر 2008 في 12:11

#3

شكرا جزيلا اخ ابا السعود علي ردك

ابو سعود الفرنسي كتب:
اولا : أين التعريف الخاص بقاعدة البيانات . اي URL الخاص بمكان قاعدة البيانات

ثانياً : اين تعريف DriverManager الخاص بالـDriver الذي يربط الكود بقاعدة البيانات

كله موجود في الداله :

 private Connection createConnection()throws DBException{
	/*
code to return conn goes here
*/		
		return conn;
	}

المشكله عندي في اني بغلق ال connection و ال Statement قبل استرجاع البيانات و بالتالي يقوم بغلق ال ResultSet

فعند استرجاع البيانات منها يعطيني Exception ==ResultSet is closed

فقمت بعمل داله جديده لغلق هذه المصادر عند الانتهاء من استرجاع البيانات

الكود الجديد :

package model;

import java.sql.*;

public class DBConn {

	private Connection conn = null;
	private	Statement stmt = null;
	private String connString;
	private String url, username, password;

	public DBConn(){}

	public DBConn(String url, String username, String password){
		this.url = url;
		this.username = username;
		this.password = password;
	}

	public DBConn (String connString, String url, String username, String password){
		this (url, username, password);
		this.connString = connString;
	}

	private Connection createConnection()throws DBException{

		Connection conn = null;

		try{
			if ( connString == null){
				Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
			}else{
				Class.forName (connString);
			}

		}catch (ClassNotFoundException ex){
			throw new DBException("Database driver class name not found.");
		}
		try{
			if ( url == null && username == null && password == null){
				conn = DriverManager.getConnection ("jdbc:odbc:mvcTestDB","sa", "mount" ); 
			}else{
				conn = DriverManager.getConnection(url, username, password);
			}
		}catch (SQLException ex){
			throw new DBException("invalid url, username/password");
		}

		return conn;
	}

	public ResultSet executeQuery (String queryText)throws DBException{

		ResultSet rs = null;

		try{
			conn = createConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery (queryText);

		}catch (SQLException ex){
			//ex.printStackTrace();
			throw new DBException();
		}

		return rs;
	}

	public void close()throws DBException{
		try{
				if ( stmt != null)
					stmt.close();
				if ( conn != null)
					conn.close();
		}catch(SQLException ex){
				throw new DBException();
		}
	}

مواضيع مشابهة