Android SQLite CREATE TABLE不能正常工作

时间:2018-01-18 22:58:59

标签: android database sqlite

CREATE TABLE未创建表格

从这里我拿表名

private static  String getTableName() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    String date = df.format(calendar.getTime());
    return date;
}


//table name
private String TABLE_DATE = getTableName();

以下是创建表

的代码
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_ENTRY_TABLE = "CREATE TABLE " +TABLE_DATE + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_ROLL + " TEXT,"
            + KEY_DATE + " TEXT," +  KEY_TIME + " TEXT" + ")";
    db.execSQL(CREATE_ENTRY_TABLE);
}

错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jagdishchoudhary.iitgandhinagarmesssystem/com.jagdishchoudhary.iitgandhinagarmesssystem.MainActivity}: android.database.sqlite.SQLiteException: near "20180119": syntax error (code 1): , while compiling: CREATE TABLE  20180119(id INTEGER PRIMARY KEY,Roll TEXT,Date TEXT,Time TEXT)
                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724)
                                               at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)
                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                               at android.os.Looper.loop(Looper.java:154)
                                               at android.app.ActivityThread.main(ActivityThread.java:6123)
                                               at java.lang.reflect.Method.invoke(Native Method)
                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
                                            Caused by: android.database.sqlite.SQLiteException: near "20180119": syntax error (code 1): , while compiling: CREATE TABLE  20180119(id INTEGER PRIMARY KEY,Roll TEXT,Date TEXT,Time TEXT)

请参阅logcat。

2 个答案:

答案 0 :(得分:3)

我非常接近100%确定20180119是一个无效的表名,这似乎是错误日志所指的内容。

在您返回的表名称的开头添加下划线,我认为您会发现它的工作方式与您预期的一样。

例如:

private String TABLE_DATE = "_"+getTableName();

这不应该是必要的,但如果由于某些奇怪的原因而无法正常工作,请尝试在下划线上添加一个字母:

private String TABLE_DATE = "_T"+getTableName();

答案 1 :(得分:0)

尝试将trim()函数与日期一起使用。

在CREATE_ENTRY_TABLE变量中使用:

String CREATE_ENTRY_TABLE = "CREATE TABLE '" + TABLE_DATE + "' (...);";

注意表名前后的单个引号。