Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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.database.sqlite.SQLiteException没有这样的表:Category(代码1 sqlite_错误):,编译时:从Category中选择*其中tag=?_Android_Sqlite - Fatal编程技术网

原因:android.database.sqlite.SQLiteException没有这样的表:Category(代码1 sqlite_错误):,编译时:从Category中选择*其中tag=?

原因:android.database.sqlite.SQLiteException没有这样的表:Category(代码1 sqlite_错误):,编译时:从Category中选择*其中tag=?,android,sqlite,Android,Sqlite,在我的应用程序中,我使用sqlite db文件获取一些数据。它对大多数用户都很好,但其中一些用户会崩溃,原因是:android.database.sqlite.SQLiteException:没有这样的表:getCtgList(代码1): 编译时:“从标记=?”的类别中选择*,新字符串[]{String}” 下面是我的SQLite DBHelper类,用于创建和复制数据库。在asster/font.db中有一个类别表。复制此表后,一些设备缺少此表。我搜索了很多来修复此错误,但没有找到任何解决方案

在我的应用程序中,我使用sqlite db文件获取一些数据。它对大多数用户都很好,但其中一些用户会崩溃,原因是:android.database.sqlite.SQLiteException:没有这样的表:getCtgList(代码1):

编译时:“从标记=?”的类别中选择*,新字符串[]{String}”

下面是我的SQLite DBHelper类,用于创建和复制数据库。在asster/font.db中有一个类别表。复制此表后,一些设备缺少此表。我搜索了很多来修复此错误,但没有找到任何解决方案。我发现谷歌play store上应用程序崩溃的趋势问题。请帮助我修复此问题罗

代码:

package com.softtechbd.nickname\u finder.Database;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.preference.PreferenceManager;
导入android.util.Log;
导入android.widget.Toast;
导入androidx.annotation.Nullable;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.ArrayList;
公共类DBHelper扩展了SQLiteOpenHelper{
public static final String location=“/data/data/com.com.softtechbd.styleshnicknickgenerator/databases”;
私有静态最终字符串DB\u Name=“font\u data.DB”;
专用静态最终整数DB_Ver=2;
私有上下文;
专用数据库;
私有对象字符串;
公共DBHelper(@Nullable Context){
super(上下文、数据库名称、null、数据库版本);
this.mContext=上下文;
初始化();
}
私有void初始化(){
if(databaseExists()){
SharedReferences prefs=首选项管理器
.GetDefaultSharedReferences(mContext);
intdbversion=prefs.getInt(“db_ver”,1);
if(DB_Ver!=dbVersion){
File dbFile=mContext.getDatabasePath(DB_名称);
如果(!dbFile.delete()){
Log.w(“dbexists”,“无法更新数据库”);
}
}
}
如果(!databaseExists()){
这是.getReadableDatabase();
试一试{
copyDatabase();
}捕获(例外e){
e、 printStackTrace();
}
copyDatabase();
//通过调用此方法,将在默认系统路径中创建空数据库
//所以我们可以用我们的数据库覆盖那个数据库。
}
}
私有void copyDatabase(){
试一试{
InputStream InputStream=mContext.getAssets().open(DB_Name);
FileOutputStream FileOutputStream=新的FileOutputStream(
“/data/data/”+mContext.getPackageName()+“/databases/”+DB_Name);
字节[]arrby=新字节[1024];
做{
int n;

如果((n=inputStream.read(arrby))我建议更改:-

private boolean databaseExists() {
    File dbFile = mContext.getDatabasePath(DB_Name);
    return dbFile.exists();
}
致:-

而是使用
mContext.getDatabasePath(DB\u NAME)
获取路径

e、 g

注:上述代码未经测试,因此可能包含一些错误,而这是正在传达的原则


另一种方法可以是使用journal\u mode pragma或
SQliteDatabase
disablewriteeaheadlogging
方法强制日志模式。

1复制数据库时,需要检查数据库是否存在\n第二次检查日志\n和第三次检查表名(拼写)\n因为错误:
QLiteException:没有这样的表:类别(代码1 SQLITE\u错误)
Fatal Exception: android.database.sqlite.SQLiteException: no such table: Category (code 1 SQLITE_ERROR): , while compiling: SELECT *FROM Category WHERE tag =?
       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
       at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
       at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
       at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
       at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
       at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
       at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1408)
       at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1347)
       at com.softtechbd.nickname_finder.Database.DBHelper.getCtgList(DBHelper.java:18)
       at com.softtechbd.nickname_finder.Fragments.pick_category_list.onCreateView(pick_category_list.java:4)
       at androidx.fragment.app.Fragment.R(Fragment.java:15)
       at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:27)
       at androidx.fragment.app.FragmentManagerImpl.b0(FragmentManagerImpl.java:49)
       at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:42)
       at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:6)
       at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:7)
       at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:88)
       at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:4)
       at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:2)
       at android.os.Handler.handleCallback(Handler.java:873)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:193)
       at android.app.ActivityThread.main(ActivityThread.java:6758)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:912)
private boolean databaseExists() {
    File dbFile = mContext.getDatabasePath(DB_Name);
    return dbFile.exists();
}
private boolean databaseExists() {
    File dbFile = mContext.getDatabasePath(DB_Name);
    if (dbFile.exists()) {
        return true;
    }
    dbFile.mkdirs(); //<<<<<<<<<< creates the databases folder
    return false;
}
FileOutputStream fileOutputStream = new FileOutputStream("/data/data/"+mContext.getPackageName()+"/databases/"+DB_Name); 
FileOutputSream fileOutputStrean = new FileOutputStream(mContext.getDatabasePath(DB_NAME));