【问题标题】:How to fix 'java.sql.SQLException: The database has been closed' problem如何修复“java.sql.SQLException:数据库已关闭”问题
【发布时间】:2019-04-13 17:27:37
【问题描述】:

我的代码说没有错误,但是当我去运行程序时它会说数据库已经关闭。

public class main
{
public static void main(String[] args)
{
    //language=SQLite
    String sql = "SELECT * FROM titles WHERE title_id = ?";

    //Create Scanner

    try
    {
        String url = "jdbc:sqlite:C:\\CmpSci 221\\Lab 13\\src\\main\\resources";
        Connection connection = DriverManager.getConnection( url );

        PreparedStatement statement = connection.prepareStatement( sql );
        statement.setInt( 1,1);

        ResultSet rSet = statement.executeQuery();

        while( rSet.next() )
        {
            System.out.println( rSet.getString( "title" ) );
        }
    }
    catch ( SQLException e )
    {
        e.printStackTrace();
    }
}

}

我希望它输出我正在使用的数据库,但它只输出以下错误消息:

java.sql.SQLException: 数据库已关闭

【问题讨论】:

  • @MustafaÇil 是 not 该问题的重复 - OP 在这里没有使用 try-with-resource,这不可能是问题
  • String url = "jdbc:sqlite:C://CmpSci 221/Lab 13/src/main/resources.db"; 。添加调试器并在 getConnection 行后验证连接对象是否可用
  • 请发布完整的异常堆栈跟踪。

标签: java jdbc


【解决方案1】:

确保在 DriverManager.getConnection() 中传递正确的 URL

如果 URL 正确,请确保您已在该位置创建了数据库。

好像没有找到数据库。

【讨论】:

    【解决方案2】:

    您的 SQLite JDBC URL 需要指向一个文件,但它却指向一个目录。

    我已经重现了您尝试打开 SQLite 数据库但将连接 URL 更改为指向我机器上的目录的错误。我不能说为什么您会收到有关关闭数据库的错误:我认为这是驱动程序中的错误。

    您需要将 URL 更改为指向文件的点,例如:

            String url = "jdbc:sqlite:C:\\CmpSci 221\\Lab 13\\src\\main\\resources\\your_database.db";
    

    【讨论】:

      猜你喜欢
      • 2017-07-18
      • 1970-01-01
      • 2013-04-26
      • 2014-11-03
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多