Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio使用Android AssetPer在资产文件夹中打开sqlite db_Android_Database_Sqlite - Fatal编程技术网

Android studio使用Android AssetPer在资产文件夹中打开sqlite db

Android studio使用Android AssetPer在资产文件夹中打开sqlite db,android,database,sqlite,Android,Database,Sqlite,我的数据库在assets文件夹中,我试图打开它,但无法正常工作。我试过使用一些OpenHelper自定义类,这些类的代码取自其他stackoverflow的问题,但不起作用(无法打开db)。最后,我用打开了数据库,但它返回了“no-this-table”错误。 openHelper类: public class DBOpenHelper extends SQLiteAssetHelper { private static final String DATABASE_NAME="dbSin

我的数据库在assets文件夹中,我试图打开它,但无法正常工作。我试过使用一些OpenHelper自定义类,这些类的代码取自其他stackoverflow的问题,但不起作用(无法打开db)。最后,我用打开了数据库,但它返回了“no-this-table”错误。 openHelper类:

public class DBOpenHelper extends SQLiteAssetHelper
{
    private static final String DATABASE_NAME="dbSinonimi.db";

    public DBOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }
}
数据库管理器:

public class DBManager {

SQLiteDatabase database;
DBOpenHelper dbOpenHelper;
Context context;

public DBManager(Context ctx)
{
    this.context = ctx;
    dbOpenHelper = new DBOpenHelper(context);
    database = dbOpenHelper.getReadableDatabase();
}

public boolean checkParola(String parola)
{

    Cursor c = database.rawQuery(
         "select * from parole where nome = '" + parola + "'", null);

    if (c != null) {
        c.moveToFirst();
        return true;
    } else return false;
}
在执行rawquery时出现错误:

03-03 13:15:13.707      648-648/com.app.Sinonimous E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.Sinonimous/com.app.Sinonimous.SearchResult}: android.database.sqlite.SQLiteException: no such table: parole: , while compiling: select * from parole where nome = 'hhol'
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
  at android.app.ActivityThread.access$600(ActivityThread.java:123)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:137)
  at android.app.ActivityThread.main(ActivityThread.java:4424)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:511)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.database.sqlite.SQLiteException: no such table: parole: , while compiling: select * from parole where nome = 'hhol'
        at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
        at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
        at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
        at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
        at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
        at com.app.Sinonimous.database.DBManager.checkParola(DBManager.java:30)
        at com.app.Sinonimous.SearchResult.handleIntent(SearchResult.java:91)
        at com.app.Sinonimous.SearchResult.onCreate(SearchResult.java:61)
        at android.app.Activity.performCreate(Activity.java:4465)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
        at android.app.ActivityThread.access$600(ActivityThread.java:123)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
        at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:4424)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:511)
03-03 13:15:13.707 648-648/com.app.Sinonimous E/AndroidRuntime﹕ 致命异常:主
java.lang.RuntimeException:无法启动活动组件信息{com.app.Sinonimous/com.app.Sinonimous.SearchResult}:android.database.sqlite.SQLiteException:没有这样的表:parole:,编译时:从parole中选择*其中nome='hhol'
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)上
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)上
在android.app.ActivityThread.access$600(ActivityThread.java:123)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:4424)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
在dalvik.system.NativeStart.main(本机方法)
原因:android.database.sqlite.SQLiteException:没有这样的表:parole:,编译时:选择*from parole,其中nome='hhol'
在android.database.sqlite.SQLiteCompiledSql.native\u compile(本机方法)中
位于android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
位于android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
位于android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:127)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:94)
位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:53)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
位于com.app.sinonimus.database.DBManager.checkParola(DBManager.java:30)
在com.app.sinonimus.SearchResult.HandleContent(SearchResult.java:91)上
在com.app.Sinonimous.SearchResult.onCreate(SearchResult.java:61)上
位于android.app.Activity.performCreate(Activity.java:4465)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)上
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)上
在android.app.ActivityThread.access$600(ActivityThread.java:123)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:4424)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)

我还尝试过Android SQLiteAssetThelper示例数据库(“northwind.db”),它工作得非常好。为什么?My db是用sqlite3创建的,它包含在assets/databases文件夹中。

您有什么证据表明打包为资产的数据库包含一个
parole
表?你有没有从你的模拟器中提取数据库并检查过?我没有任何证据。我试着在o.s.外壳上做一些查询,它工作正常。如何从模拟器中提取db?使用
adb pull
或DDMS.Mmmm,我已尝试查看指南,但在数据库文件夹中找不到我的db。。。为什么?这在模拟器上应该可以正常工作。在设备上,您需要使用
运行方式
,如一个答案中所述。