我尝试编辑并读出我的数据库并且我总是得到一个连接,但是我无法从数据库中插入或选择任何内容,因为它告诉我连接已经再次关闭。所以方法不起作用。我不明白为什么。
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();
}
}
答案 0 :(得分:1)
正如@Berger在评论中所说,你的connect()方法正在打开连接,但是它也会在finally块之后立即关闭它。
然后将已关闭的连接对象返回到selectAll()方法。然后它尝试使用已经关闭的连接创建一个Statement等等。
您需要做的是打开连接,返回,使用它,只有在它被使用后才能关闭它。