使用AndroidStudio在设备上创建sqlite数据库
我目前正在做我的学校作业。在调试我的应用程序时,我目前在创建SQLITE数据库方面遇到了一些问题 logcat:使用AndroidStudio在设备上创建sqlite数据库,android,sqlite,android-studio,Android,Sqlite,Android Studio,我目前正在做我的学校作业。在调试我的应用程序时,我目前在创建SQLITE数据库方面遇到了一些问题 logcat: E/SQLiteLog﹕ (14) os_unix.c:30046: (2) open(/data/data/com.asus.microfilm/databases/Sugar.db) - E/SQLiteDatabase﹕ Failed to open database '/data/data/com.asus.microfilm/databases/Sugar.db'. 我想
E/SQLiteLog﹕ (14) os_unix.c:30046: (2) open(/data/data/com.asus.microfilm/databases/Sugar.db) -
E/SQLiteDatabase﹕ Failed to open database '/data/data/com.asus.microfilm/databases/Sugar.db'.
我想知道为什么它会打开另一个包DB。我在网上搜索了一些例子,但我找不到任何解决方案,这就是为什么我决定在这里发布它
此外,我已经使用了adb shell,但在我的软件包中没有发现任何内容
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context)
{
super(context, context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME, null, DATABASE_VERSION);
}
DatabaseHelper myDb;
myDb = new DatabaseHelper(getActivity());
tab1.java
public class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context)
{
super(context, context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME, null, DATABASE_VERSION);
}
DatabaseHelper myDb;
myDb = new DatabaseHelper(getActivity());
我的tab1.java是一个片段。例如,我的解决方案
public class NotesDB extends SQLiteOpenHelper {
private static final String DB_NAME = "NotesFile";
private static final String LOG_TAG = "myLogs";
private static final String TABLE_NAME = "Notes";
private static final String COLUMN_KEY = "key";
private static final String COLUMN_NOTE = "note";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_QUESTION = "question";
private String table = "";
public NotesDB(Context context) {
super(context, DB_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- onCreate database ---");
db.execSQL("create table "+TABLE_NAME+" ("
+ "id integer primary key autoincrement,"
+ COLUMN_NAME+" text,"
+ COLUMN_KEY+" integer,"
+ COLUMN_QUESTION+" text,"
+ COLUMN_NOTE+" text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
用法
SQLiteDatabase db = new NotesDB(getAppContext()).getWritableDatabase();
c=db.query("Notes", null, selection, selectionArgs , null, null, null );................
SQLiteOpenHelper有两个构造函数:
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)
您必须实现其中之一,并使用onCreate方法创建表。尝试以下方法:
public class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
试试这个,让我知道它是否在那里创建了文件
public class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context)
{
super(context, context.getExternalFilesDir("MyDatabase") + "/" + DATABASE_NAME, null, DATABASE_VERSION);
}
如果你想使用内存,你也可以试试这个,因为它更安全
public class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context)
{
super(context, context.getFilesDir() + "/" + DATABASE_NAME, null, DATABASE_VERSION);
}
更新1:尝试使用此
public DatabaseHelper(final Context context) {
super(context, Environment.getExternalStorageDirectory()
+ File.separator + FILE_DIR
+ File.separator + DATABASE_NAME, null, DATABASE_VERSION);
}
已在
上下文中更新。getExternalFilesDir
我想将其保存到SD卡中,但当我在DDMS中打开我的包>文件时,仍然没有您想做的事情?您想将数据库保存到其他位置吗?我正在尝试将我的*.db文件保存到SD卡中。因为我的手机没有根。我无法访问我的内部存储器中的data>data
文件夹谁说你不能访问data>data文件夹?嗨@latsenko Anton,我试过了。不行!当我启动应用程序时,立即停止显示:(嗨@walkmn,我试过这个。它不起作用,我也不知道为什么。当我检查我的日志时,它显示了/data/data/com.asus.microfilm/databases/Sugar.db
,这与我的软件包完全不同。不,使用DDMS检查:(您正在查找哪个目录?storage>MicroSD>Android>com.user.myassignment2v04>文件
,对吗?不,您在错误的目录中搜索,可能是数据库是根据我建议的解决方案创建的,但当您在错误的路径中搜索时,您找不到它,我已添加了日志,以便您可以查看确切的路径。),并在注释中与我共享该路径