Java数据库立即断开连接

时间:2017-12-06 16:15:40

标签: java sql database sqlite connection

我尝试编辑并读出我的数据库并且我总是得到一个连接,但是我无法从数据库中插入或选择任何内容,因为它告诉我连接已经再次关闭。所以方法不起作用。我不明白为什么。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

public class Test {

    public static Connection connect() {
        Connection conn = null;
        String url = "jdbc:sqlite:C:/Users/eichw/Desktop/test.db";

        try {

            // create a connection to the database
            conn = DriverManager.getConnection(url);

            System.out.println("Connection to SQLite has been established.");

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
        }      
        return conn;
    }

   public void selectAll(){
        String sql = "SELECT KNr, KName, KFirma, KMail FROM test";

        try (Connection conn = this.connect();
             Statement stmt  = conn.createStatement();
             ResultSet rs    = stmt.executeQuery(sql)){

            // loop through the result set
            while (rs.next()) {
                System.out.println(rs.getInt("KNr") +  "\t" + 
                                   rs.getString("KName") + "\t" +
                                   rs.getDouble("KFirma"));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }

    public static void main(String[] args) {
        Test app = new Test();
       app.selectAll();

    }
}

1 个答案:

答案 0 :(得分:1)

正如@Berger在评论中所说,你的connect()方法正在打开连接,但是它也会在finally块之后立即关闭它。

然后将已关闭的连接对象返回到selectAll()方法。然后它尝试使用已经关闭的连接创建一个Statement等等。

您需要做的是打开连接,返回,使用它,只有在它被使用后才能关闭它。