SQLite не может найти вновь вставленную строкуAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 SQLite не может найти вновь вставленную строку

Сообщение Anonymous »

Я использую SQLite для отслеживания фабрик и создания проектов, использующих эти фабрики, поэтому у меня есть две таблицы, которые по существу указывают друг на друга: Fabrics знает, каким проектам они принадлежат, а Projects знает, какие фабрики являются его частью.
При добавлении нового проекта я хочу циклически перебирать добавляемые фабрики и добавлять к ним новый идентификатор проекта, однако, когда я пытаюсь получить идентификатор из вновь созданного проекта, SQLite сообщает мне, что не может найти столбец с имя
Я использую нажатие кнопки «Следовать» для создания нового проекта, где столбец «Имя» в таблице «Проект» должен быть уникальным

Код: Выделить всё

projectButton.setOnClickListener {
if(!projectName.text.isEmpty()){
val fabricToProject = buildChecked(checkedList).toTypedArray()
val result: Long = fabricDB.projectCreate(fabricToProject,projectName.text.toString())
val projectID = fabricDB.getProjectID(projectName.text.toString())
for(x in fabricToProject){
fabricDB.fabricUpdate(x,projectID)
}

if(result.toInt() == -1){
Toast.makeText(applicationContext,"Project create failed, is your project name unique?",Toast.LENGTH_LONG).show()
}else{
Toast.makeText(applicationContext,"Project created!",Toast.LENGTH_SHORT).show()
}
}
else{
Toast.makeText(applicationContext,"Please enter a project name.",Toast.LENGTH_LONG).show()
}
}
projectCreate выглядит так и работает так, как ожидалось. Когда я загружаю свою активность, которая загружает их все в представления, я вижу все добавленные мной проекты

Код: Выделить всё

fun projectCreate(fabricIDs: Array, name: String): Long {
val dbW: SQLiteDatabase=this.writableDatabase
val dbR: SQLiteDatabase=this.readableDatabase
var idString = ""
val contentValuesProject = ContentValues()
contentValuesProject.put(Pcol4,name)
for(x in fabricIDs){
idString += "$x,"
}
idString = idString.dropLast(1)
contentValuesProject.put(Pcol2,idString)
val result: Long = dbW.insert(PtableName,null,contentValuesProject)
return result
}
Изначально я пытался получить идентификатор проекта из projectCreate и немедленно добавить его в строки Fabric, но когда это сообщило мне, что не удалось найти столбец, который я выбрал для создания getProjectID, который просто пытается запустить запрос выбора и терпит ту же ошибку:

Код: Выделить всё

fun getProjectID(name:String): Int{
val dbR: SQLiteDatabase=this.readableDatabase
val projectID = DatabaseUtils.stringForQuery(dbR,"SELECT ID FROM Project WHERE Name is $name",null)
return projectID.toInt()
}
Но если я добавлю что-то вроде Project1, это действие приведет к сбою со следующей ошибкой:

Код: Выделить всё

(1) no such column: Project1 in "SELECT ID FROM Project WHERE Name is Project1"
Если я затем открою действие списка проектов, которое загружается из той же таблицы, я ясно увижу Project1. Самая большая разница заключается в том, что мое действие списка проектов использует курсор, поскольку мне нужно пройти по всей таблице, тогда как этот вызов getProjectID использует readableDatabase, поскольку я хочу получить только единственное значение
(это мое самое первое приложение, поэтому, если есть какие-либо рекомендации по очистке моего кода выше или передовые методы, о которых я не знаю, чувствую можешь и меня ударить ими тоже)

Подробнее здесь: https://stackoverflow.com/questions/798 ... serted-row
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»