My query is showing a syntax error in the DAO_Impl build for some reason. I tried a rebuild but it still errors when conducting the following query:
Query:
@Query("UPDATE TasksTable SET daysOfWeek = :days WHERE taskID = :tkID")
fun updateDays(tkID: Int, days: MutableList<Boolean>)
EntityTask:
data class EntityTask(
var taskID: Int = 0,
var personID : Int = 0,
var name : String = "",
var frequency: Int = 1,
var interval: Int = 0,
var haveSchedule: Boolean = false,
var schedule: Int = 0,
var scheduleString: String = "",
var description: String = "",
var showProgressLayout: Boolean = true,
var daysOfWeek: MutableList<Boolean> = mutableListOf(),
var daysOfMonth: MutableList<Boolean> = mutableListOf(),
var currentScores: ScoresCurrent = ScoresCurrent(),
@Ignore
var scores : MutableList<EntityScore> = mutableListOf()
)
DaoTasks_Impl:
@Override
public void updateDays(int tkID, List<Boolean> days) {
StringBuilder _stringBuilder = StringUtil.newStringBuilder();
_stringBuilder.append("UPDATE TasksTable SET daysOfWeek = ");
final int _inputSize = days.size();
StringUtil.appendPlaceholders(_stringBuilder, _inputSize);
_stringBuilder.append(" WHERE taskID = ");
_stringBuilder.append("?");
final String _sql = _stringBuilder.toString();
SupportSQLiteStatement _stmt = __db.compileStatement(_sql); //This is line 330
Error message:
03-01 07:05:37.504 26855-27552/com.samuelriesterer.taskprogress E/SQLiteLog: (1) near "?": syntax error
03-01 07:05:37.514 26855-27552/com.samuelriesterer.taskprogress E/AndroidRuntime: FATAL EXCEPTION: Thread-23439
Process: com.samuelriesterer.taskprogress, PID: 26855
android.database.sqlite.SQLiteException: near "?": syntax error (code 1): , while compiling: UPDATE TasksTable SET daysOfWeek = ?,?,?,?,?,?,? WHERE taskID = ?
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(near "?": syntax error (code 1): , while compiling: UPDATE TasksTable SET daysOfWeek = ?,?,?,?,?,?,? WHERE taskID = ?)
#################################################################
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1132)
at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.compileStatement(FrameworkSQLiteDatabase.java:64)
at android.arch.persistence.room.RoomDatabase.compileStatement(RoomDatabase.java:244)
at com.samuelriesterer.taskprogress.data.daos.DAOTasks_Impl.updateDays(DAOTasks_Impl.java:310)
at com.samuelriesterer.taskprogress.data.Data$Companion$editTask$thread$1.run(Data.kt:569)
at java.lang.Thread.run(Thread.java:818)
I have a type converter for this so I don't know why it won't let me update a list. I know my type converter works because it works when adding the list to the database. (It is added to my database). It is just not working when used in an UPDATE query.
My converter:
@TypeConverter fun stringToListBoolean(value: String): MutableList<Boolean>
{
val list = mutableListOf<Boolean>()
value.forEach { c ->
if(c == 'F') list.add(false)
else list.add(true)
}
return list
}
@TypeConverter fun listBooleanToString(list: MutableList<Boolean>): String
{
var value = ""
for(i in list)
{
if(i) value += "T"
else value += "F"
}
return value
}
See Question&Answers more detail:
os