首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java - JDBC驱动程序SQLite 3.7.2 -无法打开数据库test.db:文件已加密或不是数据库

Java - JDBC驱动程序SQLite 3.7.2 -无法打开数据库test.db:文件已加密或不是数据库
EN

Stack Overflow用户
提问于 2012-10-09 23:11:38
回答 3查看 5.1K关注 0票数 2

我在java中使用SQLite JDBC driver 3.7.2将一些数据写入数据库文件。当我尝试在命令行上打开数据库文件时,我收到一条错误消息:

“无法打开数据库test.db:文件已加密或不是数据库”

我做了一个最小的例子,它导致了这个行为:

代码语言:javascript
复制
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class PlaygroundSQLite {
    public static void insertIntoDB(String dbFilename, String tablename){
        try {
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:"+dbFilename);
            PreparedStatement prep = conn.prepareStatement("insert into " + tablename + "( id, text) values (?, ?);");

            prep.setString(1, "1FD22A38");
            prep.setString(2, "This is a simple test");

            prep.addBatch();

            conn.setAutoCommit(false);
            prep.executeBatch();
            conn.setAutoCommit(true);

            conn.close();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void createDB(String dbFilename, String tablename){
        try {
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:" + dbFilename);
            Statement stat = conn.createStatement();
            stat.executeUpdate("drop table if exists test;");
            stat.executeUpdate("create table " + tablename + " (key INTEGER PRIMARY KEY, id TEXT , text TEXT);");
            conn.close();
            stat.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String dbFilename = "test.db";
        String tablename = "test";

        PlaygroundSQLite.createDB(dbFilename, tablename);
        PlaygroundSQLite.insertIntoDB(dbFilename, tablename);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-10 15:09:27

这里的问题是JDBC驱动程序(版本3.7.2)和我机器上安装的SQLite版本(版本2.8.17)之间的版本不匹配。使用sqlite3二进制文件解决了这个问题。

票数 4
EN

Stack Overflow用户

发布于 2013-08-09 15:07:59

有没有这样的东西:“java中的SQLite JDBC driver 3.7.2”?我知道JavaDB (Derby),但不知道SQLite内部实际上有JavaDB驱动程序。

票数 0
EN

Stack Overflow用户

发布于 2018-08-13 02:28:12

尝试以下代码:

代码语言:javascript
复制
Properties config = new Properties();
config.put("journal_mode", "WAL");
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:"+dbFilename,config);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12803140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档