使用AndroidStudio在设备上创建sqlite数据库

使用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'. 我想

我目前正在做我的学校作业。在调试我的应用程序时,我目前在创建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'.
我想知道为什么它会打开另一个包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>文件
,对吗?不,您在错误的目录中搜索,可能是数据库是根据我建议的解决方案创建的,但当您在错误的路径中搜索时,您找不到它,我已添加了日志,以便您可以查看确切的路径。),并在注释中与我共享该路径