gpt4 book ai didi

android-sqlite - 编译时 net.sqlcipher.database.SQLiteException : file is not a database: ,: select count(*) from sqlite_master

转载 作者:行者123 更新时间:2023-12-03 21:20:39 24 4
gpt4 key购买 nike

错误这一行:

mDataBase = SQLiteDatabase.openDatabase(dbPath, "123", null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);

打开数据库时。但怎么了?如何用密码打开数据库?谁能帮我?
  • 我在 SQLITE Db 浏览器 > 文件 > 设置加密
  • 上设置了密码
  • 在android部分打开这个密码
  • 打开时显示错误
  • error : net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master

  • 任何人都可以帮我解决它吗?提前致谢
    import android.content.Context;
    import android.database.SQLException;
    //import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    import net.sqlcipher.database.SQLiteDatabase;
    import net.sqlcipher.database.SQLiteDatabase;
    import net.sqlcipher.database.SQLiteOpenHelper;
    import net.sqlcipher.database.SQLiteDatabase.CursorFactory;


    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.File;
    import net.sqlcipher.database.SQLiteDatabase;
    import android.app.Activity;
    import android.os.Bundle;

    public class DatabaseHelper extends SQLiteOpenHelper {

    private static String TAG = DatabaseHelper.class.getName();
    private static String DB_PATH = "";
    private static String DB_NAME = "ec.db";// Database name
    private SQLiteDatabase mDataBase;
    private final Context mContext;
    File databaseFile=null;
    public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, 1);
    DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
    this.mContext = context;
    SQLiteDatabase.loadLibs(context);
    File databaseFile = context.getDatabasePath(DB_NAME);
    databaseFile.mkdirs();
    }

    public void createDataBase() throws IOException {
    // If database not exists copy it from the assets
    boolean mDataBaseExist = checkDataBase();
    if (!mDataBaseExist) {
    this.getWritableDatabase("123");
    this.close();
    try {
    // Copy the database from assests
    copyDataBase();
    Log.e(TAG, "createDatabase database created");
    } catch (IOException mIOException) {
    throw new Error(mIOException.toString() + " : " + DB_PATH
    + DB_NAME);// "ErrorCopyingDataBase"
    }
    }
    }

    private boolean checkDataBase() {
    File dbFile = new File(DB_PATH + DB_NAME);
    return dbFile.exists();
    }

    // Copy the database from assets
    private void copyDataBase() throws IOException {
    InputStream mInput = mContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[4096];
    int mLength;
    while ((mLength = mInput.read(mBuffer)) > 0) {
    mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
    }

    // Open the database, so we can query it
    public boolean openDataBase() throws SQLException {
    String mPath = DB_PATH + DB_NAME;
    //File dbFile = new File(DB_PATH + DB_NAME);
    //File databaseFile = mContext.getDatabasePath(DB_NAME);
    //databaseFile.mkdirs();
    //databaseFile.delete();

    SQLiteDatabase.loadLibs(mContext);

    String dbPath = mContext.getDatabasePath("ec.db").getPath();


    //databaseFile.delete();
    SQLiteDatabase.loadLibs(mContext);
    //mDataBase = SQLiteDatabase.openOrCreateDatabase(databaseFile, "123", null);
    //mDataBase = SQLiteDatabase.openDatabase(mPath, "123",null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
    mDataBase = SQLiteDatabase.openDatabase(dbPath, "123", null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);

    return mDataBase != null;
    }

    @Override
    public synchronized void close() {
    if (mDataBase != null)
    mDataBase.close();
    super.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }


    }

    最佳答案

    您正在引用 123456Sa 的密码字符串值,但是您在 createDataBase 中的调用使用 123 的值作为 getWritableDatabase 的密码。

    关于android-sqlite - 编译时 net.sqlcipher.database.SQLiteException : file is not a database: ,: select count(*) from sqlite_master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51726067/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com