【发布时间】:2021-10-04 22:28:29
【问题描述】:
您好,我正在创建一个 Android 应用程序,当我在公告板上写字时,它允许将标题、内容、价格、数字 (1) 和图像存储在数据库中。将发布注册到数据库时发生错误。 这几天我一直在想,但我不知道为什么。
以下是我的错误。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.project, PID: 2816
android.database.sqlite.SQLiteException: near "coding": syntax error (code 1): , while compiling: INSERT INTO writing (title, content, price, person, count, image) VALUES (test coding, this is test, 3000, 2, 1, ?)
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.compileStatement(SQLiteDatabase.java:1070)
at com.example.swu_guru.GroupBuyingWrite$onCreate$2.onClick(GroupBuyingWrite.kt:97)
at android.view.View.performClick(View.java:6294)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View$PerformClick.run(View.java:24770)
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)
这是数据库类 (MyDBHelper.kt)
package com.example.project
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
class MyDBHelper(context: Context) : SQLiteOpenHelper(context, "gbDB", null, 1){
override fun onCreate(db: SQLiteDatabase?) {
db!!.execSQL("CREATE TABLE writing (" + "title text, " +
"content text, " + "price INTEGER, " + "person INTEGER, " + "count INTEGER, " + "image BLOB);")
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
}
}
这是创建帖子部分。 (GroupBuyingWrite.kt)
并且调试表明该类的部分var stmt: SQLiteStatement = sqlitedb.compileStatement(insQuery)有错误。
btnGBWregister.setOnClickListener {
sqlitedb = myDBHelper.writableDatabase
var title: String ?= edtGBWtitle.text.toString()
var content: String = edtGBWcontent.text.toString()
var price: String = edtGBWprice.text.toString()
var person: String = edtGBWperson.text.toString()
var count: String = GBWcount.toString()
var image: Drawable = imgGBWimageview.drawable
var byteArray: ByteArray ?= null
try {
val bitmapDrawable = image as BitmapDrawable?
val bitmap = bitmapDrawable?.bitmap
val stream = ByteArrayOutputStream()
bitmap?.compress(Bitmap.CompressFormat.PNG, 100, stream)
byteArray = stream.toByteArray()
Log.d("image save", "image saving")
} catch (cce: ClassCastException) {Log.d("image null", "image null")}
var insQuery: String = "INSERT INTO writing (title, content, price, person, count, image) " +
"VALUES ($title, $content, $price, $person, $count, ?)"
var stmt: SQLiteStatement = sqlitedb.compileStatement(insQuery)
stmt.bindBlob(1, byteArray)
stmt.execute()
}
【问题讨论】:
-
对所有变量使用参数,而不仅仅是
byteArray
标签: android database sqlite kotlin