2017-06-12 5 views
2

Je suis en train de créer la table en utilisant la bibliothèque anko dans kotlin comme ci-dessouscausés par: android.database.sqlite.SQLiteException: près de "org": erreur de syntaxe (code 1):, lors de la compilation:

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)) 
} 

Je reçois l'erreur ci-dessous lorsque j'ajoute AUTOINCREMENT à ID. Cela fonctionne sans AUTOINCREMENT. Quel est le moyen de rendre n'importe quel attribut comme AUTOINCREMENT en utilisant la bibliothèque anko.

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 [email protected], 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 [email protected], 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) 
+0

string add PersonTable.ID = "nom et vous tous", etc tous ici –

+0

@parikdhakan qu'est-ce que tu veux dire? –

+0

Si vous voyez mon code, il n'y a rien de tel. Je crois que 'AUTOINCREMENT' est remplacé par' org.jetbrains.anko.db.SqlTypeModifierImpl @ 7d0b905' –

Répondre

2

Il semble que vous utilisiez une version obsolète d'Anko. Avec la version 0.10 un problème avec les modificateurs de concaténation a été corrigé et inversé avec la version 0.10.1 à nouveau.

Avant la partie pertinente du code était "$modifier $m"$m est la représentation sous forme de chaîne du modificateur. Comme il ne définit pas de méthode toString(), la représentation Java de l'instance est utilisée.

Avec le correctif le code est "$modifiers ${m.modifier}". Ici, ${m.modifier} est en fait une chaîne.

Si les dernières corrections ne vous concernent pas, utilisez la version 0.10.

+0

J'utilise 'compiler" org.jetbrains.anko: anko-sqlite: 0.10.1 "' I pense que c'est seulement la dernière version qu'ils ont maintenant –

+0

Ohh, pour une raison quelconque, ce code est erroné avec cette version à nouveau. Avec _master_, c'est bien. – tynn

+0

Vous savez Si je fais un attribut AUTOINCREMENT alors il jette cette erreur https://pastebin.com/S7q1M9rc c'est aussi un bug –

1

J'ai eu le même problème et trouvé une solution de contournement. J'ai été en mesure de coder en dur cette partie de l'instruction SQL, en utilisant la fonction SqlType.create. J'ai vérifié le SQL généré dans le DB Browser et il fonctionnait parfaitement. Je n'ai plus jamais eu cette erreur depuis.

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