2013-10-01 2 views
0

2 개의 클래스 ConnectionUtil, DemoResultSet이 있습니다. 문제는 내가 을 2 번() 삽입 할 때입니다. 단지 하나의 레코드 만 데이터베이스에 삽입됩니다. 두 번째 삽입 삽입 오류 : "Error:The connection is closed.". 그래서 주석을 제거 할 때 close() statement. 그것은 좋은 실행합니다. 나는 그 곤경이 뭔지 모른다. 두 번째 삽입 클로즈 된 접속에 발생하는, 그래서 누군가는 나에게 몇 가지 아이디어Java jdbc를 데이터베이스에 삽입 할 수 없습니다.

public class ConnectionUtil { 

    private static String url = "jdbc:sqlserver://localhost:1433;databaseName=Northwind"; 
    private static String username = "user"; 
    private static String pw = "pass"; 
    private static Connection conn = null; 

    static { 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public static Connection getConnection() { 
     if (conn == null) { 
      try { 
       conn = DriverManager.getConnection(url, username, pw); 
      } catch (SQLException ex) { 
       Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
     return conn; 
    } 
} 

public class DemoResultSet { 

    private static ResultSet rs = null; 
    private static Connection conn = null; 

    public static void initialize() { 
     try { 
      conn = ConnectionUtil.getConnection(); 
      Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      String sql = "select CategoryID, CategoryName from Categories"; 
      rs = statement.executeQuery(sql); 
     } catch (SQLException ex) { 
      Logger.getLogger(DemoResultSet.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public static void main(String[] args) { 
     initialize(); 
     insert(); 
     insert(); 
    } 

    public static void insert() { 
     try { 
      rs.moveToInsertRow(); 
      rs.updateString("CategoryName", "Test C1008G3"); 
      rs.insertRow(); 
      System.out.println("Inserted"); 
      conn.close(); //uncomment it's okay 
     } catch (SQLException ex) { 
      System.out.println("Error:" + ex.getMessage()); 
     } 
    } 
} 

답변

2

당신은 삽입 내부 연결을 닫는을 제공합니다.

conn.close()는 정말과 같이 배치해야합니다 :

public static void main(String[] args) throws Exception{ 
    try{ 
     initialize(); 
     insert(); 
     insert(); 
    } 
    finally{ 
     conn.close(); 
    } 
} 

을 그래서 당신은 어떤 문제의 경우에 제대로 닫혀 연결을 보장 할 수있다. 당신의 삽입 방법

0

당신은 conn.close(); //uncomment it's okay

그러나이 아니가있다!

이 연결을 닫은 후에는 다시 열지 않습니다.

0

jdbc 연결은 다소 무거운 객체이며 그 뒤에있는 아이디어는 모든 작업 후에 닫히지 않고 여러 작업에 대한 연결을 재사용합니다. 응용 프로그램이 완료되면 연결을 닫아야합니다. 자신의 연결을 고집한다면, 모든 닫을 때마다 다시 초기화해야합니다.

0

문제는 연결을 종료 한 후 Connection에 쓰기를 시도하고 있다는 것입니다. 이 줄의 주석 처리를 제거 할 수는 있지만 그건 나쁜 습관 일뿐입니다. 나의 조언 : initialize();를 호출하십시오. 메서드는 main 메서드 내부가 아니라 insert 메서드의 첫 번째 명령문으로 사용됩니다.

이렇게하면 필요할 때마다 연결되어있을 것입니다.

+0

나는 당신이 말한 것을합니다. 그러나 나는 실수를합니다. – haind

+0

어떤 오류가 있습니까? – Stultuske

+0

표시 : Oct 01, 2013 4:34:20 PM ResultSetDemo.DemoResultSet initialize 오류 : 연결이 닫혔습니다. 심각도 : null – haind

관련 문제