Android: SQLite Connection returns null



I正在尝试连接SQLite。

public class Database {
private Statement stmt;
private Connection conn;
private final String DB_NAME = "db.sqlite";
private final String DB_PATH = "/data/data/com.Simple_Diary/databases/";
public void Database()
{
    connect();
}
/**
 * Connect to the database
 */
public void connect()
{
    try {
        copyDataBase();
        Class.forName("org.sqlite.JDBC").newInstance();
        conn = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH + DB_NAME);
        stmt = conn.createStatement();
    }
    catch (Exception e) {}
}
/**
 * Query
 * @param sql
 * @return ResultSet Result object
 */
public ResultSet query(String sql)
{
    try {
        return stmt.executeQuery(sql);
    }
    catch (SQLException | NullPointerException e) {
        return null;
    }
}
/**
 * Copy database file from assets to "databases" directory
 */
private void copyDataBase()
{
    try {
        MainActivity ma = new MainActivity();
        InputStream mInput = ma.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream mOutput = new FileOutputStream(outFileName);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer)) > 0){
            mOutput.write(mBuffer, 0, mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();
    }
    catch (IOException e) {}
}

}

 try {
        Database db = new Database();
        ResultSet rs = db.query("SELECT * FROM categories");
        String str = "its null!";
        if(rs != null) {
            while (rs.next()) {
                str += rs.getString("title") + "n";
            }
        }
        dbtext.setText(str);
    } catch(SQLException e){
        dbtext.setText("err: " + e.toString());
    }

但是变量"rs"返回null,因为变量"conn"返回null。我在这个网站上读到了很多关于同一问题的答案,但我无法解决这个问题。。。我正在使用intelliJ。我添加了sqlitejdbcjar作为库,但它没有帮助。

您应该使用SQLiteOpenHelper类。这包含了大量的工作。你所需要做的就是

@Override
public void onCreate(SQLiteDatabase db) 
{
  // put DDL here to create and init your tables, if needed.
}

然后使用insertOrThrow或rawQuery(query,args)等方法。

如果你需要更多帮助,请告诉我。

最新更新