没有创建SQLite表

时间:2016-03-04 01:10:17

标签: java android

我在android studio中创建了一个数据库来保存数据。该表未在数据库中创建。我得到的错误是:

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

1 个答案:

答案 0 :(得分:0)

以下是如何创建数据库的示例。首先,您的课程应该从 SQLiteOpenHelper

扩展

然后使用super到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 );";