2016-02-13 155 views
1

未在Android設備監視器> DBMS>文件瀏覽>數據中創建SQLite數據庫文件(.db)。該目錄中沒有顯示.db文件。我發現自己無法弄清爲什麼沒有創建數據庫文件。 這裏是我的文件。未創建SQLite數據庫文件

MainActivity.java

package com.example.zohaib.database; 

import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

public class MainActivity extends AppCompatActivity { 

    SQLiteOpenHelper sqLiteOpenHelper; 
    SQLiteDatabase sqLiteDatabase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     sqLiteOpenHelper = new DBConnection(this); 
     sqLiteDatabase = sqLiteOpenHelper.getWritableDatabase(); 

    } 
} 

DBConnection.java

package com.example.zohaib.database; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
import android.widget.Toast; 

public class DBConnection extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "products.db"; 
    private static final String TABLE_PRODUCTS = "products"; 
    private static final String COLUMN_ID = "id"; 
    private static final String COLUMN_PRODUCTNAME = "productName"; 



    public DBConnection(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
      String query ="CREATE TABLE " + TABLE_PRODUCTS + " (" + 
         COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
         COLUMN_PRODUCTNAME + " TEXT " + 
         ")"; 
      db.execSQL(query); 
      Log.d("Create Database:", "Successful"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS); 
     onCreate(db); 
    } 
} 
+0

但是數據庫仍然按照您的預期工作?你還能讀寫嗎? –

+0

也請發佈您在adb shell中使用的命令來檢查文件的位置。 –

+0

@DougStevenson我使用我的移動設備作爲模擬器。我從android studio的工具欄打開Android設備監視器。從這我點擊我的運行設備,然後DBMS>文件探索>數據。在點擊數據文件夾時沒有顯示任何文件 –

回答

0

更新: 只是刪除/卸載從您正在測試的設備的應用程序,並修復查詢即添加分號「;」最後。重新構建應用程序。

你可以使用onUpgrade(),以通過增加版本重建DATABSE表。也不好直接由你來調用生命週期方法。

工作示例代碼(不完美):

package com.example.zohaib.database; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DBConnection extends SQLiteOpenHelper { 
    // change version with change in schema or db changes 
    private static final int DATABASE_VERSION = 2; 
    private static final String DATABASE_NAME = "products.db"; 
    private static final String TABLE_PRODUCTS = "products"; 
    private static final String COLUMN_ID = "_id"; 
    private static final String COLUMN_PRODUCTNAME = "productName"; 



    public DBConnection(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     createTable(db); 
     Log.d("From onCreate : ", " successfully created."); 
    } 

    private void createTable(SQLiteDatabase db) { 
     String query ="CREATE TABLE " + TABLE_PRODUCTS + " (" + 
       COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       COLUMN_PRODUCTNAME + " TEXT " + 
       ");"; 
     db.execSQL(query); 
     Log.d("Create Database:", "Successful"); 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COLUMN_PRODUCTNAME, "Sample Data"); 
     db.insert(TABLE_PRODUCTS, null, contentValues); 
     Log.d("Insert Row:", "Insert Row Successful"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS); 
     createTable(db); 
     Log.d("From onUpgrade : ", " successfully upgraded."); 
    } 

    @Override 
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUCTS); 
     createTable(db); 
     Log.d("From onDowngrade : ", " successfully Downgraded."); 
    } 
} 

這裏有雲的數據庫文件。

Here Goes the Database files.

+2

只有在內部類中編寫代碼時,才需要'MainActivity.this'。在'sqLiteOpenHelper = new DBConnection(MainActivity.this);','這個'就好了。 –

+1

你爲什麼建議在'onCreate()'中插入數據?這似乎不合適。 –

+2

Activity包含上下文,所以不需要使用'new DBConnection(MainActivity.this)','new DBConnection(this)'確定。 – deadfish

2

您正在使用二合一表名創建表的腳本。

變化

String query ="CREATE TABLE test_1 " + TABLE_PRODUCTS + " (" + 
        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        COLUMN_PRODUCTNAME + " TEXT " + 
        ")"; 

String query ="CREATE TABLE " + TABLE_PRODUCTS + " (" + 
        COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        COLUMN_PRODUCTNAME + " TEXT " + 
        ");"; 
+1

缺失;它應該是 」);」 。請編輯 – SreeAndroidDev

+0

不工作 –