2016-03-04 65 views
-2

我有一個在android studio中創建的數據庫來保存數據。該表未在數據庫中創建。我得到的錯誤是:SQLite表未被創建

03-04 00:55:45.783 25787-25787/com/SQLiteLog: (1) no such table: TableName 
03-04 00:55:45.783 25787-25787/com.E/SQLiteDatabase: Error inserting  

我創建表的代碼是:

@Override 
public void onCreate(SQLiteDatabase db) { 
    db = SQLiteDatabase.openOrCreateDatabase("DB.ad",null); 
    Log.v(TAG, "*TABLE "); 
    // create TableName table 
    db.execSQL(CREATE_TableName_TABLE); 
    this.checkDataBase(); 
} 
private boolean checkDataBase() { 
    SQLiteDatabase checkDB = null; 
    try { 
     checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null, 
       SQLiteDatabase.OPEN_READONLY); 
     checkDB.close(); 
    } catch (SQLiteException e) { 
     // database doesn't exist yet. 
    } 
    return checkDB != null; 

} 

我想知道是否有人能告訴我爲什麼我收到此錯誤?

String CREATE_TableName_TABLE = "CREATE TABLE TableNames(" + 
               "Id INT(30) PRIMARY KEY  AUTOINCREMENT, " + 
               "TagNo TEXT, " + 
               "Description TEXT, " + 
               "WeeksGone INTEGER(10) NOT NULL DEFAULT 0);"; 
+0

是U更新的數據庫版本? – JpCrow

+0

@JpCrow我該怎麼做?我以前從未在android中使用過數據庫。 – Hannah

+0

你可以發佈'CREATE_TableName_TABLE'嗎? –

回答

0

下面是如何創建數據庫的示例。第一類應該從SQLiteOpenHelper

然後使用超到SQLiteOpenHelper類與數據庫名稱和版本擴展,

public YourClassName(Context context) { 
    super(context, "YourDatabaseName", null, 1); // 1 is the version of the database, after each change in your db you should ++. 
} 

然後創建表:

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    final String SQL_CREATE_BLABLA_TABLE = "CREATE TABLE " + "TableNameHere" + " (" + 
      "_id" + " INTEGER PRIMARY KEY," + 
      "name" + " TEXT NOT NULL);"; 

    sqLiteDatabase.execSQL(SQL_CREATE_BLABLA_TABLE); 
} 

最後萬一你需要升級你的數據庫版本,因爲你做任何改變覆蓋onUpgrade方法,以便再次創建表。

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

有關如何實施SQLite的更多信息,請閱讀this

請查看以下幾種類型,以創建表:

1.0存儲類和數據類型

存儲在SQLite數據庫(或操縱數據庫引擎)的每個值都有的一個以下存儲類別:

NULL。該值是一個NULL值。

INTEGER。該值是一個有符號整數,根據值的大小存儲在1,2,3,4,6或8個字節中。

REAL。該值是一個浮點值,以8字節的IEEE浮點數存儲。

TEXT。該值是一個文本字符串,使用數據庫編碼(UTF-8,UTF-16BE或UTF-16LE)存儲。

BLOB。該值是一組數據,完全按照輸入存儲。

有關數據類型的更多信息,請參閱此link

所以,你的表應該創造這樣的:

String CREATE_TableName_TABLE = "CREATE TABLE TableNames (Id INTEGER PRIMARY KEY AUTOINCREMENT, TagNo TEXT, 
Description TEXT, WeeksGone INTEGER NOT NULL DEFAULT 0);";