【问题标题】:Converting SQLite Database from Android to Windows (Java)将 SQLite 数据库从 Android 转换为 Windows (Java)
【发布时间】:2011-12-23 18:46:23
【问题描述】:

我正在尝试将现有的 Android SQLite 数据库转换为多平台 SQLite 数据库,以便创建一个更大项目的原型,该原型可以在不依赖 Android 的情况下在 Windows 上进行测试。被导入 Eclipse(使用 Java)的现有 Android 类包括:

  • 上下文
  • 光标
  • SQLException
  • SQLite 数据库
  • SQLite 语句

到目前为止,我发现Android中的SQLException与java.sql库中的类(也称为SQLException)非常相似。我还下载并包含了 sqlite4java.jar 文件,其中包含 SQLiteStatement 类。在这个 jar 文件中,它还具有 SQLiteConnection,它表示到 SQLite 数据库的单个连接。但是,我无法为 Cursor 和 Context 找到可比较的非 Android 类。有谁知道解决办法吗?

Cursor 的主要调用如下:

Cursor cursor = db.query(true, table, columns, selection, selectionArgs, null, null, null, null);

其中 'db' 曾经是一个 SQLiteDatabase。我将 'db' 更改为 SQLiteConnection,但它没有 query() 函数,所以我遇到了另一个问题。

注意:我还查看了 org.tmatesoft.sqljet 和 org.sqlite 包,但找不到任何有用的东西。

提前感谢您的帮助。

【问题讨论】:

    标签: java android windows sqlite


    【解决方案1】:

    我使用了 Zentus 的 SQLiteJDBC。根据文档配置项目后,只需使用标准的 JDBC API。

    我还听说过 Xerial 的 derivative of Zentus's library(也称为 SQLiteJDBC),但我从未使用过它。

    【讨论】:

    • 我的项目中实际上有 sqlite-jdbc-3.7.2.jar 文件,但我找不到任何与 Cursor 或 Context 类似的类。也可能是我没有完全理解某些东西,因为我没有使用 SQLite 或 Android 的经验。
    【解决方案2】:

    下载 SQLite JDBC 驱动 jar 文件并添加到项目类路径中。 创建数据库连接:

    String assetsDirPath = "./src/com/tamrd/speareasynlureminder/assets/";
    
    Connection conn = null;
    String url = "jdbc:sqlite:" + assetsDirPath + "test.db";
    
    try {
        Class.forName("org.sqlite.JDBC");
        conn = DriverManager.getConnection(url);
        if (conn != null) {
            DatabaseMetaData meta = conn.getMetaData();
            System.out.println("The driver name is " + meta.getDriverName());
            System.out.println("A new database connection has been created.");
        }
    
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    

    现在使用 Connection 对象可以执行查询:

        ResultSet rs = null;
        try {
            Statement stmt = queryDb.createStatement();
            rs = stmt.executeQuery(strQuery);
           
        } catch (SQLException e) {
            e.printStackTrace();
        }
    
        while (rs.next()) {
            System.out.println(rs.getString("columnName"));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2022-10-13
      • 2012-12-12
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多