Android 致命异常;SQLiteException:没有这样的列:
updateName()工作正常,但updateID()抛出错误 我找不到解决办法 你能检查一下我的密码,看看出了什么问题吗 DataBaseHandler.ktAndroid 致命异常;SQLiteException:没有这样的列:,android,sqlite,kotlin,Android,Sqlite,Kotlin,updateName()工作正常,但updateID()抛出错误 我找不到解决办法 你能检查一下我的密码,看看出了什么问题吗 DataBaseHandler.kt val DB_NAME=“DBDEMO2” val DB_VERSION=1 val TABLE\u NAME=“TABLE\u DEMO2” val COL_EMP_ID=“empId” val COL_EMP_NAME=“empName” 数据类用户(变量id:Int,变量名称:String) val list=mutableLi
val DB_NAME=“DBDEMO2”
val DB_VERSION=1
val TABLE\u NAME=“TABLE\u DEMO2”
val COL_EMP_ID=“empId”
val COL_EMP_NAME=“empName”
数据类用户(变量id:Int,变量名称:String)
val list=mutableListOf(
“约翰”、“罗伯特”、“威廉”、“查尔斯”、“玛丽”、“伊丽莎白”、“玛丽亚”、“安妮”、“玛格丽特”,
“大卫”、“詹姆斯”、“理查德”、“约翰”、“乔治”、“保罗”、“苏珊”、“露丝”、“安娜”、“爱丽丝”、“多萝西”)
val CREATE_TABLE=“CREATE TABLE”+TABLE_NAME+”(“+COL_EMP_ID+”整数“+COL_EMP_NAME+”文本非空“+”)
类DataBaseHandler(上下文:context):SQLiteOpenHelper(上下文,DB\u名称,null,DB\u版本){
var db:SQLiteDatabase=writableDatabase
fun insertData(){
val cv=ContentValues()
变量id=1001
var指数=0
用于(1001..1020中的id){
cv.put(COL_EMP_ID,ID)
简历(职位名称、列表[索引])
db.insert(表格名称,空,cv)
索引++
}
}
fun modifyName(empID:Int,newName:String){
val cv=ContentValues()
cv.put(COL_EMP_NAME,newName)
数据库更新(表名,cv,列EMP ID+“=”+empID,null)
}
fun modifyID(名称:String,newEmpID:Int){
val cv=ContentValues()
cv.put(COL_EMP_ID,newEmpID)
数据库更新(表名,cv,列名+“=”+名称,空)
}
fun deleteAllData(){
db.delete(表名称,null,null)
}
fun displayData():列表{
val list=mutableListOf()
val cursor=db.query(表名称,数组(列名称,列名称),null,null,null,null,null)
if(cursor!=null&&cursor.count>0){
while(cursor.moveToNext()){
val data=User(cursor.getInt(0),cursor.getString(1))
列表.添加(数据)
}
}
cursor.close()
返回列表
}
重写onCreate(db:SQLiteDatabase?){
db?.execSQL(创建表)
Log.i(“标记”、“OnCreateTable”)
}
重写onOpen(db:SQLiteDatabase?){
超级开放(db)
Log.i(“标记”、“不可更改”)
}
重写更新(db:SQLiteDatabase?,旧版本:Int,新版本:Int){
}
}
MainActivity.kt
class MainActivity:AppCompatActivity(),View.OnClickListener{
lateinit var dbhandler:DataBaseHandler
lateinit变量列表:列表
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
BtnUpdateName.setOnClickListener(此)
BtnUpdateID.setOnClickListener(此)
ButtonDiskData.setOnClickListener(此)
buttonDeleteAll.setOnClickListener(此)
buttonInsertData.setOnClickListener(此)
刷新列表()
}
覆盖有趣的onClick(v:视图?){
何时(v?.id){
R.id.BtnUpdateName->updateName()
R.id.BtnUpdateID->updateID()
R.id.ButtonDiskData->refreshList()
R.id.buttonDeleteAll->deleteAll()
R.id.buttonInsertData->dbhandler.insertData()
}
}
fun updateName(){
val id=Integer.parseInt(EditTextEmpID.getText().toString())
val newEmpName=EditTextNewEmpName.getText().toString()
dbhandler.modifyName(id,newEmpName)
刷新列表()
}
fun updateID(){
val name=EditTextEmpName.getText().toString()
val newEmpID=Integer.parseInt(EditTextNewEmpID.getText().toString())
modifyID(名称,newEmpID)
刷新列表()
}
全数{
val dbHandlerDel=数据库处理程序(此)
dbHandlerDel.deleteAllData()
刷新列表()
}
乐趣清单(){
text显示结果。text=getResult()
}
fun getResult():字符串{
val dbHandlerResult=数据库处理程序(this@MainActivity)
list=dbHandlerResult.displayData()
val str=StringBuffer(“”)
if(list!=null&&list.size>0){
for(列表中的元素){
str.append(element.id.toString()+“,“+element.name+”\n”)
}
return str.toString()
}否则
返回“无项目”
}
}
updateName()工作正常,但updateID()抛出错误
2020-05-31 18:51:33.656 6423-6423/com.db.dbdemo2 E/AndroidRuntime:
致命异常:主
进程:com.db.dbdemo2,PID:6423
android.database.sqlite.SQLiteException:没有这样的列:Mary(代码1):,编译时:UPDATE table_DEMO2 SET empId=?哪里
empName=Mary
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native
(方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
位于android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1577)
在
android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1525)
位于com.db.dbdemo2.DataBaseHandler.modifyID(DataBaseHandler.kt:52)
位于com.db.dbdemo2.MainActivity.updateID(MainActivity.kt:75)
在com.db.dbdemo2.MainActivity.onClick上(MainActivity.kt:58)
在android.view.view.performClick上(view.java:5637)
在android.view.view$PerformClick.run(view.java:22429)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6119)
位于java.lang.reflect.Method.invoke(本机方法)
val DB_NAME = "DBDEMO2"
val DB_VERSION = 1
val TABLE_NAME = "table_DEMO2"
val COL_EMP_ID = "empId"
val COL_EMP_NAME = "empName"
data class User(var id: Int, var name: String)
val list = mutableListOf<String>(
"John", "Robert", "William", "Charles", "Mary", "Elizabeth", "Maria", "Anne", "Margaret",
"David","James","Richard","Johann","George","Paul","Susan", "Ruth", "Anna","Alice","Dorothy")
val CREATE_TABLE = "CREATE TABLE "+ TABLE_NAME+"("+ COL_EMP_ID+" INTEGER, "+COL_EMP_NAME+" TEXT NOT NULL" + ")"
class DataBaseHandler(context: Context) : SQLiteOpenHelper(context, DB_NAME,null, DB_VERSION){
var db: SQLiteDatabase = writableDatabase
fun insertData(){
val cv = ContentValues()
var id = 1001
var index = 0
for (id in 1001..1020){
cv.put(COL_EMP_ID,id)
cv.put(COL_EMP_NAME, list[index])
db.insert(TABLE_NAME,null,cv)
index++
}
}
fun modifyName(empID : Int, newName : String){
val cv = ContentValues()
cv.put(COL_EMP_NAME,newName)
db.update(TABLE_NAME,cv, COL_EMP_ID+" = "+empID,null)
}
fun modifyID(name : String, newEmpID : Int){
val cv = ContentValues()
cv.put(COL_EMP_ID,newEmpID)
db.update(TABLE_NAME,cv, COL_EMP_NAME+" = "+name,null)
}
fun deleteAllData(){
db.delete(TABLE_NAME,null,null)
}
fun displayData() : List<User>{
val list = mutableListOf<User>()
val cursor = db.query(TABLE_NAME, arrayOf(COL_EMP_ID, COL_EMP_NAME),null,null,null,null,null,null)
if (cursor!=null && cursor.count >0 ) {
while (cursor.moveToNext()) {
val data = User(cursor.getInt(0), cursor.getString(1))
list.add(data)
}
}
cursor.close()
return list
}
override fun onCreate(db: SQLiteDatabase?) {
db?.execSQL(CREATE_TABLE)
Log.i("TAG", "OnCreateTable")
}
override fun onOpen(db: SQLiteDatabase?) {
super.onOpen(db)
Log.i("TAG", "OnOpenTable")
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
}
}
class MainActivity : AppCompatActivity(), View.OnClickListener {
lateinit var dbhandler: DataBaseHandler
lateinit var list: List<User>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
BtnUpdateName.setOnClickListener(this)
BtnUpdateID.setOnClickListener(this)
buttonDispData.setOnClickListener(this)
buttonDeleteAll.setOnClickListener(this)
buttonInsertData.setOnClickListener(this)
refreshList()
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.BtnUpdateName -> updateName()
R.id.BtnUpdateID -> updateID()
R.id.buttonDispData -> refreshList()
R.id.buttonDeleteAll -> deleteAll()
R.id.buttonInsertData -> dbhandler.insertData()
}
}
fun updateName() {
val id = Integer.parseInt(EditTextEmpID.getText().toString())
val newEmpName = EditTextNewEmpName.getText().toString()
dbhandler.modifyName(id, newEmpName)
refreshList()
}
fun updateID() {
val name = EditTextEmpName.getText().toString()
val newEmpID = Integer.parseInt(EditTextNewEmpID.getText().toString())
dbhandler.modifyID(name, newEmpID)
refreshList()
}
fun deleteAll() {
val dbHandlerDel = DataBaseHandler(this)
dbHandlerDel.deleteAllData()
refreshList()
}
fun refreshList() {
textDisplayResult.text = getResult()
}
fun getResult(): String {
val dbHandlerResult = DataBaseHandler(this@MainActivity)
list = dbHandlerResult.displayData()
val str = StringBuffer("")
if (list != null && list.size > 0) {
for (element in list) {
str.append(element.id.toString() + ", " + element.name + "\n")
}
return str.toString()
} else
return "No Items"
}
fun modifyID(name : String, newEmpID : Int){
val cv = ContentValues()
cv.put(COL_EMP_ID,newEmpID)
val args = arrayOf<String>(name)
db.update(TABLE_NAME, values, COL_EMP_NAME + "=?", args)
}