Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
原因:android.database.sqlite.SQLiteException:near";org";:编译时出现语法错误(代码1):_Android_Sqlite_Kotlin_Anko - Fatal编程技术网

原因:android.database.sqlite.SQLiteException:near";org";:编译时出现语法错误(代码1):

原因:android.database.sqlite.SQLiteException:near";org";:编译时出现语法错误(代码1):,android,sqlite,kotlin,anko,Android,Sqlite,Kotlin,Anko,我正在尝试使用kotlin中的anko库创建表,如下所示 override fun onCreate(db: SQLiteDatabase?) { db!!.createTable(PersonTable.Name, true, Pair(PersonTable.ID, INTEGER + PRIMARY_KEY + AUTOINCREMENT), Pair(PersonTable.PersonName, TEXT),

我正在尝试使用
kotlin
中的
anko
库创建表,如下所示

override fun onCreate(db: SQLiteDatabase?) {
    db!!.createTable(PersonTable.Name, true,
            Pair(PersonTable.ID, INTEGER + PRIMARY_KEY + AUTOINCREMENT),
            Pair(PersonTable.PersonName, TEXT),
            Pair(PersonTable.Domain, TEXT),
            Pair(PersonTable.MobileNumber, REAL))
}
当我向ID添加
AUTOINCREMENT
时,出现以下错误。它在没有
AUTOINCREMENT
的情况下工作。使用
anko
库将任何属性设置为
AUTOINCREMENT
的方法是什么

  E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.williamsro.fourthdemo, PID: 4799
  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.williamsro.fourthdemo/com.williamsro.fourthdemo.MainActivity}: android.database.sqlite.SQLiteException: near "org": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS `Person`(id INTEGER PRIMARY KEY org.jetbrains.anko.db.SqlTypeModifierImpl@7d0b905, person_name TEXT, domain TEXT, mobile_number REAL);
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
      at android.app.ActivityThread.-wrap12(ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:154)
      at android.app.ActivityThread.main(ActivityThread.java:6077)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
   Caused by: android.database.sqlite.SQLiteException: near "org": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS `Person`(id INTEGER PRIMARY KEY org.jetbrains.anko.db.SqlTypeModifierImpl@7d0b905, person_name TEXT, domain TEXT, mobile_number REAL);
      at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
      at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
      at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
      at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
      at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
      at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
      at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1675)
      at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1606)
      at org.jetbrains.anko.db.DatabaseKt.createTable(Database.kt:80)
      at com.williamsro.fourthdemo.AppDbHelpler.onCreate(AppDbHelpler.kt:17)
      at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
      at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
      at org.jetbrains.anko.db.ManagedSQLiteOpenHelper.openDatabase(Database.kt:166)
      at org.jetbrains.anko.db.ManagedSQLiteOpenHelper.use(Database.kt:157)
      at com.williamsro.fourthdemo.MainActivity.insertPerson(MainActivity.kt:44)
      at com.williamsro.fourthdemo.MainActivity.onCreate(MainActivity.kt:72)
      at android.app.Activity.performCreate(Activity.java:6664)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:154) 
      at android.app.ActivityThread.main(ActivityThread.java:6077) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
E/AndroidRuntime:致命异常:主
进程:com.williamsro.fourthdemo,PID:4799
java.lang.RuntimeException:无法启动活动组件信息{com.williamsro.fourthdemo/com.williamsro.fourthdemo.MainActivity}:android.database.sqlite.SQLiteException:靠近“org”:编译时出现语法错误(代码1)::如果不存在,则创建表`Person`(id)整型主键org.jetbrains.anko.db。SqlTypeModifierImpl@7d0b905、人名文本、域名文本、手机号码(实数);
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
原因:android.database.sqlite.SQLiteException:near“org”:编译时出现语法错误(代码1):如果不存在,则创建表`Person`(id INTEGER PRIMARY KEY org.jetbrains.anko.db)。SqlTypeModifierImpl@7d0b905、人名文本、域名文本、手机号码(实数);
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
位于android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1675)
位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1606)
位于org.jetbrains.anko.db.DatabaseKt.createTable(Database.kt:80)
位于com.williamsro.fourthdemo.AppDbHelpler.onCreate(AppDbHelpler.kt:17)
位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
在org.jetbrains.anko.db.ManagedSQLiteOpenHelper.openDatabase(Database.kt:166)上
在org.jetbrains.anko.db.ManagedSQLiteOpenHelper.use(Database.kt:157)上
在com.williamsro.fourthdemo.MainActivity.insertPerson上(MainActivity.kt:44)
在com.williamsro.fourthdemo.MainActivity.onCreate上(MainActivity.kt:72)
位于android.app.Activity.performCreate(Activity.java:6664)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

看起来您使用的是过时的Anko版本。版本0.10修复了连接修饰符的问题,并再次使用版本0.10.1恢复

在此之前,代码的相关部分是
“$modifier$m”
,其中
$m
是修饰符的字符串表示形式。由于它没有定义
toString()
方法,因此使用实例的Java表示形式

在修复过程中,代码是
“$modifiers${m.modifier}”
。这里
${m.modifier}
实际上是一个字符串


如果最新的修复程序与您无关,请使用0.10版。

我也遇到了同样的问题,并找到了解决方法。我能够使用
SqlType.create
函数对SQL语句的这一部分进行硬编码

override fun onCreate(db: SQLiteDatabase) {
    db.createTable(CrimeTable.TABLE_NAME, true,
            CrimeTable.ID to SqlType.create("INTEGER PRIMARY KEY AUTOINCREMENT"),
            CrimeTable.UUID to TEXT,
            CrimeTable.TITLE to TEXT,
            CrimeTable.DATE to INTEGER,
            CrimeTable.IS_SOLVED to TEXT
    )
}
我在DB浏览器中检查了生成的SQL,它工作得很好。从那以后,我再也没有遇到过这个错误

CREATE TABLE `crimes`(_id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT, title TEXT, date INTEGER, isSolved TEXT)

添加字符串PersonTable.ID=“您的姓名和全部”等等here@parikdhakan你是什么意思?如果你看到我的代码,就没有这样的了。我相信
AUTOINCREMENT
正在被
org.jetbrains.anko.db所取代。SqlTypeModifierImpl@7d0b905
remove
AUTOINCREMENT
这是不必要的。@jaydeppatel这是必要的,这就是我添加的原因。它在没有它的情况下工作就是这个bug他们的库?我正在使用
编译“org.jetbrains.anko:anko sqlite:0.10.1”
我认为这只是他们现在拥有的最新版本哦,出于某种原因,此版本的代码再次出现错误。使用master也可以。您知道,如果我使一个属性自动递增,那么它会抛出此错误。这也是一个错误。我的意思是,我试图将表中一个属性的属性设置为自动递增,然后行此错误它应该可以工作。PS我现在没有在主键上应用自动增量它可以与
master
和版本
0.10
一起工作。版本
0.10.1<