J'ai une liste de réception avec un tableau dedans. J'essaie de sauvegarder l'article lorsqu'il est cliqué sur ma base de données, de sorte que je puisse vous rappeler quels éléments ont été vérifiés lors du démarrage.
Process: com.example.woodlandwanderer, PID: 14080
android.database.sqlite.SQLiteException: no such column: item.toString (code 1): , while compiling: INSERT INTO list(found) VALUES (item.toString)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501)
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:1752)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1682)
at com.example.woodlandwanderer.levelOneActivity$2.onItemClick(levelOneActivity.java:121)
at android.widget.AdapterView.performItemClick(AdapterView.java:318)
at android.widget.AbsListView.performItemClick(AbsListView.java:1158)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3127)
at android.widget.AbsListView$3.run(AbsListView.java:4042)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
3 Réponses :
android.database.sqlite.sqliteeException: non de cette colonne: item.tostring (code 1):, lors de la compilation: Insert dans la liste des valeurs de la liste (Attribution) (élément.tostring) P> P> P>Cette erreur est due à l'élément.Tostring non joint aux guillemets simples. Qui pourrait être corrigé en utilisant: - p>
xxx pré> mais strong> voulez-vous vraiment insérer une ligne où la colonne trouvée a la valeur "élément.tostring ". Je doute beaucoup et vous pouvez très bien vous retrouver avec de nombreuses lignes avec la même valeur probablement inutile. P>
Ce que vous semblez vouloir est: - P>
db.execSQL("DELETE FROM list WHERE found = ?",new String[]{item.toString});
La partie de tostrage fait une erreur; ne peut pas résoudre le symbole
@greenpony Ensuite, l'élément n'est pas un objet et il y a un code insuffisant pour déterminer quel est le problème exact avec l'article. Il ne s'est pas plaint auparavant parce que l'élément.Tostring a été utilisé une valeur. si vous avez utilisé db.execsql ("Insert dans la liste des valeurs de la liste (trouvées) (?)" ", nouvelle chaîne [] {" fred "}); code> alors la valeur Fred B> serait stocké dans la colonne trouvée de la table de liste (en supposant que les tables existent et qu'il n'y ait aucune autre raison de l'échec de l'insert) i>.
Etant donné que l'élément est un objet, je suppose et que vous voulez que ce soit StringResult, essayez
Public Void EXECSQL (String SQL)
Exécuter une seule déclaration SQL Ce n'est pas une autre instruction SQL ou une autre instruction SQL qui renvoie des données. P> blockQuote>Vous pouvez donc utiliser cette surcharge de
EXECSQL () code> pour insérer ou supprimer des données, mais vous devrez également concaténer le paramètre que vous souhaitez transmettre avec des guillemets simples et ce n'est pas Coffre-fort comme il laisse votre application large ouverte à Injection SQL .
Aussi de: https://developer.android.com/reference/andrroid/database/sqlite/sqlitedatabase.htmlitedatabase.htmlitedatabase.htmlitedatabase.htmlitedatabase.html#execsql (java.lang.string,% 20java.lang.Object% 5b% 5D) a> p>: P>Public Void EXECSQL (String SQL, Objet [] Bindargs)
Exécuter un seul Déclaration SQL qui estnon forte> a sélectionnée / insertion / mise à jour / Supprimer. P> BlockQuote> SO
EXECSQL () code>est pas strong> le moyen recommandé d'insérer ou de supprimer des lignes.
Au lieu de cela, utilisez la méthodeinsérer () code>en fournissant les valeurs de colonne dans uncontentValues code> objet et la méthodeSupprimer () CODE>:boolean deleted = db.delete("list", "found = ?", new String[] {item.toString}) > 0;
Vous avez édité votre question et avez posté une question totalement différente. Toutes les réponses que vous avez déjà reçues sont désormais invalidées. Ce n'est pas comme ça que ça marche. Lisez ceci: Meta .stackoverflow.com / Questions / 251078 / ...