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

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

Сообщение Anonymous »

Я использую SQLite для отслеживания фабрик и создания проектов, использующих эти фабрики. Две таблицы указывают друг на друга, поэтому Fabrics знает, к каким проектам они принадлежат, а проекты знают, какие Fabrics являются его частью. При добавлении нового проекта я хочу просмотреть добавленные ткани и добавить новый идентификатор проекта. Однако, когда я пытаюсь получить идентификатор из вновь созданного проекта, 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() для запуска запроса SELECT:

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

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) нет такого столбца: Project1 в «ВЫБЕРИТЕ ID ИЗ проекта, ГДЕ Имя — Project1»

Если я затем открою действие списка проектов (которое загружается из той же таблицы), я увижу Project1. Разница в том, что в моей активности списка проектов используется курсор, поскольку мне нужно пройти по таблице, тогда как getProjectID() использует readableDatabase(), поскольку я извлекаю только одно значение.

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

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

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

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

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

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