Android Room Custom Update @Query mit String -Array -Absturz mit "SQLite -Syntax? Fehler"

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Android Room Custom Update @Query mit String -Array -Absturz mit "SQLite -Syntax? Fehler"

by Guest » 12 Feb 2025, 07:28

Ich habe also ein Problem mit der Update -Abfrage in @Query, mit der versucht wird, eine Spalte zu aktualisieren, in der String [] enthält. < /p>

Konverter: < /p>

Code: Select all

@TypeConverter
public static String[] fromString(String value) {
Type listType = new TypeToken() {
}.getType();
return new Gson().fromJson(value, listType);
}

@TypeConverter
public static String fromArrayList(String[] list) {
//Type listType = new TypeToken() {
//}.getType();
Gson gson = new Gson();
String json = gson.toJson(list);
return json;
}
< /code>

Dao: < /p>

@Dao
public interface CharacterDao {

@Insert(onConflict = OnConflictStrategy.IGNORE)
long[] insertCharacters(Character... characters);

@Query("UPDATE characters SET name = :name, episodes = :episodes, createdDate = :createdDate " +
"WHERE character_id = :character_id")
void updateCharacter(String character_id, String name, String[] episodes, String createdDate);
}
Um es tiefer zu erklären, was ich jetzt mache, versuche ich in meinem Repository.class, um Benutzer zu aktualisieren, wenn -Ripps -1 zurückgibt (Also gab es einen Konflikt). Außerdem habe ich @typeconverters für die ganze Datenbank, Altought Ich versuchte, sie zu DAO und Entitäten usw. hinzuzufügen, hinzugefügt, aber es löst das Problem nicht. < /p>

Es wird also das Problem angezeigt, wenn Sie charakterdao.updatecharacter mit ordnungsgemäßen Argumenten aufrufen. Wenn ich das Episoden -Array sowohl aus Methodenaufruf als auch @Query entferne, funktioniert es perfekt, so dass die String [] hier das Problem ist. @Update anstelle von benutzerdefinierten @Query Es funktioniert gut. Aber es stört mich immer noch und es gibt nirgendwo eine Antwort dafür. Das Problem ist nur mit der Aktualisierung < /p>

Der Fehler, den ich erhalte, ist "syntax? Fehler" < /p>

Trace: < / p>

Code: Select all

  --------- beginning of crash
2019-05-15 14:29:23.556 20853-21022/pl.com.bubka.characs E/AndroidRuntime: FATAL EXCEPTION: pool-1-thread-1
Process: pl.com.bubka.characs, PID: 20853
android.database.sqlite.SQLiteException: near "?": syntax error (Sqlite code 1 SQLITE_ERROR): , while compiling: UPDATE characters SET name = ?, episodes = ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, createdDate = ? WHERE character_id = ?, (OS error - 0:Success)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:948)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:559)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:603)
at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:63)
at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1166)
at androidx.sqlite.db.framework.FrameworkSQLiteDatabase.compileStatement(FrameworkSQLiteDatabase.java:64)
at androidx.room.RoomDatabase.compileStatement(RoomDatabase.java:249)
at pl.com.bubka.characs.database.CharacterDao_Impl.updateCharacter(CharacterDao_Impl.java:465)
at pl.com.bubka.characs.repositories.CharactersRepository$1.saveCallResult(CharactersRepository.java:50)
at pl.com.bubka.characs.repositories.CharactersRepository$1.saveCallResult(CharactersRepository.java:39)
at pl.com.bubka.characs.utils.NetworkBoundResources$3$1.run(NetworkBoundResources.java:69)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:784)

Top