2012-03-15 58 views
2

尝试插入到TABLE_EVENTS时出现错误,但插入/查询TABLE_CONTACTS时没有问题。这是我创建的字符串:数据库创建语句不制作第二个表?

private static final String DATABASE_CREATE = 

      "create table "+ TABLE_CONTACTS + "(" + COLUMN_CONTACTS_LOOKUP 
      + " text primary key, " + COLUMN_CONTACTS_ADDED 
      + " real not null);" + 

      " create table "+ TABLE_EVENTS +"("+ COLUMN_ID +" integer primary key autoincrement, "+ 
      COLUMN_EVENTS_TITLE + " text not null, "+COLUMN_EVENTS_START_TIME+" real not null, "+ 
      COLUMN_EVENTS_END_TIME+ " real, "+COLUMN_EVENTS_TYPE+" integer not null, "+COLUMN_EVENTS_START_LONG+" integer, "+ 
      COLUMN_EVENTS_START_LAT+" integer);"; 

调用与

public void onCreate(SQLiteDatabase db){ 
      db.execSQL(DATABASE_CREATE); 
     } 

我的插入是

public long createEvent(String title, long start, long end, int type, int long_, int lat){ 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(COLUMN_EVENTS_TITLE, title); 
     initialValues.put(COLUMN_EVENTS_START_TIME, start); 
     initialValues.put(COLUMN_EVENTS_END_TIME, end); 
     initialValues.put(COLUMN_EVENTS_TYPE, type); 
     initialValues.put(COLUMN_EVENTS_START_LAT, lat); 
     initialValues.put(COLUMN_EVENTS_START_LONG, long_); 

     return mDb.insert(TABLE_EVENTS, null, initialValues); 
    } 
+0

如果您在谈论“错误”,那么您应该发布抛出异常的logcat。 – Egor 2012-03-15 14:00:14

回答

2

这是因为SQLiteDatabase类只允许一个CREATE语句进行DATABASE_CREATE字符串。如果你想创建一个以上的表,关键是要准备多个创建的字符串,然后打电话给他们一个接一个地在你的onCreate方法:

public void onCreate(SQLiteDatabase db) 
{ 
    db.execSQL(DATABASE_CREATE_CONTACTS_TABLE); 
    db.execSQL(DATABASE_CREATE_EVENTS_TABLE); 
} 

你得到一个错误,因为你的事件表从未创建。

1

我遇到了同样的问题。男孩是一个头痛的问题。

为每个新表创建一个字符串,并在每个表上调用db.execSQL(query)!这似乎是使用该问题的一些问题;分隔符。

2

SQLite在任何时候都只允许一条SQL命令。您需要将您的创建语句拆分为单个字符串并逐个执行它们。

private static final String CREATE_TABLE_1 = 
"create table "+ TABLE_CONTACTS + "(" + COLUMN_CONTACTS_LOOKUP 
      + " text primary key, " + COLUMN_CONTACTS_ADDED 
      + " real not null);"; 


private static final String CREATE_TABLE_2 = 
"create table "+ TABLE_EVENTS +"("+ COLUMN_ID +" integer primary key autoincrement, "+ 
COLUMN_EVENTS_TITLE + " text not null, "+COLUMN_EVENTS_START_TIME+" real not null, "+ 
COLUMN_EVENTS_END_TIME+ " real, "+COLUMN_EVENTS_TYPE+" integer not null, "+COLUMN_EVENTS_START_LONG+" integer, "+ 
COLUMN_EVENTS_START_LAT+" integer);"; 


public void onCreate(SQLiteDatabase db) { 

db.execSQL(CREATE_TABLE_1); 
db.execSQL(CREATE_TABLE_2); 
}