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