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

时间:2015-11-11 09:59:56

标签: 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'.

我想知道为什么打开其他包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);
    }

tab1.java

DatabaseHelper myDb;
myDb = new DatabaseHelper(getActivity());

我的tab1.java是一个片段。

4 个答案:

答案 0 :(得分:1)

我的解决方案例如

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 );................

答案 1 :(得分:1)

试试这个:

public class DatabaseHelper extends SQLiteOpenHelper 
{
    public DatabaseHelper(Context context) 
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

答案 2 :(得分:0)

SQLiteOpenHelper有两个构造函数:

SQLiteOpenHelper(Context context, String name,    SQLiteDatabase.CursorFactory factory, int version)


SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)

您必须实现其中一个,并在onCreate方法中创建表。

答案 3 :(得分:0)

试试这个,让我知道它是否在那里创建了文件

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);
}