【问题标题】:sqlite sql syntax error near '(''('附近的sqlite sql语法错误
【发布时间】:2016-03-12 10:18:13
【问题描述】:

'('附近的sqlite sql语法错误

<code>
    @Override
    public void onCreate(SQLiteDatabase arg0) {
    StringBuilder sb = new StringBuilder();
    sb.append("create table IF NOT EXISTS " + tableName + "(" );
    sb.append(" eng TEXT primary key,");
    sb.append(" gra TEXT not null,");
    sb.append(" memo TEXT null,");
    sb.append(" fsen TEXT null,");
    sb.append(" ox INTEGER not null DEFAULT 0,");
    sb.append(" oxSeq TEXT null,");
    sb.append(" timeCreate TEXT not null DEFAULT datetime('now', 'localtime'),");
    sb.append(" timeLast TEXT not null DEFAULT datetime('now', 'localtime') )");
    arg0.execSQL(sb.toString());
    Log.w(" -- Result -- ", tableName + " is created.");
    }

    ////Error message is like following...

    android.database.sqlite.SQLiteException: near "(": 
    syntax error (code 1): , while compiling: 
    create table IF NOT EXISTS userDic( 
    eng TEXT primary key, 
    kor TEXT not null, 
    memo TEXT null, 
    fsen TEXT null, 
    ox INTEGER not null DEFAULT 0, 
    oxSeq TEXT null, 
    timeCreate TEXT not null DEFAULT datetime('now', 'localtime'), 
    timeLast TEXT not null DEFAULT datetime('now', 'localtime') ) 
</code>

我不知道为什么会发生错误... 我不知道为什么会发生错误... 我不知道为什么会发生错误... 我不知道为什么会发生错误... 我不知道为什么会发生错误... 不知道为什么会出现错误...

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    要使用默认值,请将datetime('now', 'localtime') 替换为例如CURRENT_TIMESTAMP。请注意,它不是本地时间,而是 UTC 祖鲁时间。

    要将表达式用作默认值,它需要在 () 括号中,例如DEFAULT(datetime('now', 'localtime')).

    https://www.sqlite.org/lang_createtable.html

    【讨论】:

    • 我明白了...所以...我需要将“DEFAULT datetime('now', 'localtime')”部分更改为 CURRENT_TIMESTAMP...
    【解决方案2】:

    其实我是根据别人的想法找到答案的。

    问题是DEFAULT

    我需要更换零件

    DEFAULT datetime('now', 'localtime')
    

    DEFAULT(datetime('now', 'localtime'))
    

    () 是必需的。现在它正在工作。

    【讨论】:

      【解决方案3】:

      tableName 需要用单引号括起来:

      更正:

       sb.append("create table IF NOT EXISTS '" + tableName + "' (" );
      

      【讨论】:

      • @FrankN.Stein 哦,我错了吗?刚去我的项目中查找它并在表名周围使用单引号,然后我再次没有使用.execSQL
      • 尝试删除它们,它也会起作用(如果表名是单个单词)。或者您的表名可能包含空格(但在这种情况下我使用[])。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2013-12-30
      • 2018-10-08
      相关资源
      最近更新 更多