Java-Android SQLite,未调用onCreate()
作者:互联网
我一直在努力在Android应用程序中创建SQLite数据库.
我看过许多教程,以及关于堆栈溢出和其他站点的许多现有问题.
这是我的DatabaseHelper类
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseHelper extends SQLiteOpenHelper {
public SQLiteDatabase db;
public static final String DATABASE_NAME = "user.db";
//Module table
public static final String MODULE_TABLE = "modules_table";
public static final String MODULE_COL_1 = "ID";
public static final String MODULE_COL_2 = "CODE";
public static final String MODULE_COL_3 = "TITLE";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
Log.d("SQL", "SQLite dbhelper");
db = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
//db.execSQL("create table " + MODULE_TABLE + "(" + MODULE_COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + MODULE_COL_2 + " TEXT, " + MODULE_COL_3 + " TEXT " +")");
db.execSQL("create table modules_table (ID INTEGER PRIMARY KEY
AUTOINCREMENT, CODE TEXT, TITLE TEXT)");
Log.d("SQL", "SQLite onCreate");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + MODULE_TABLE);
onCreate(db);
}
}
我设法使SQLite dbhelper出现在logcat中,但无法使SQLite onCreate出现,并且无法在文件资源管理器或设备本身(无论是模拟设备还是真实设备)中的任何位置找到数据库.
任何帮助将不胜感激,并为代码的格式表示歉意!
解决方法:
我建议在活动中临时使用以下内容:
DatabaseHelper myDBHelper = new DatabaseHelper(this); //<<<<<<<<< you appear to already have the equivalent of this line (if so use whatever variable name you have given to the DatabaseHelper object)
Cursor csr = myDBHelper.getWritableDatabase().query("sqlite_master",null,null,null,null,null,null);
DatabaseUtils.dumpCursor(csr);
csr.close();
运行,然后检查日志.您应该看到modules_table和sqlite_sequence的输出(后者是因为您已经编码了autoincrement.
sqlite_master是一个系统表,用于存储系统信息,例如表名和索引名,即模式.
附加-访问数据库文件
在未生根的设备上,每个应用程序数据(数据/数据)都受到保护,因此您将无法看到数据库文件.
在仿真器上,它取决于仿真器.我相信更高版本的Android Studio现在允许访问,例如:-
>请注意,以上是Android 10.1 Pie(API 28),因此数据库具有预写日志记录(WAL),因此-shm和-wal文件也存在.
>软件包为mjt.pvcheck.完整路径是data / data / mjt.pvcheck / databases.
>如您所见,可以看到缓存目录,然后我建议出于某种原因(也许是失败),该数据库不存在,但是按照虚拟设备文件浏览器的检查,您似乎确实具有访问权限我的包裹中包含的文件夹是缓存.
>也许,请尝试在设备上重新运行(请注意在设备浏览器中,由于它不刷新,因此请重新选择该设备),这可能是您看不到数据库的另一个原因.
标签:sqlite,android-sqlite,java,android 来源: https://codeday.me/bug/20191108/2006649.html