Android SQLite多值插入失败:单值正常多值无法插入
问题解决:SQLite插入多字段失败的修复
你的代码无法插入多个值的核心问题有两个:
- 表结构缺失字段:原创建表的语句只定义了
id和name1,没有包含要插入的violate字段,导致数据库无法接收该列的数据 - 插入语句不完整:原插入SQL只指定了
name1字段,没有包含violate,同时也没有绑定第二个参数的值
以下是修正后的完整代码:
package com.example.termexam; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class rapp extends AppCompatActivity { EditText ed1r,ed2r; Button b1,b2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rateapp); ed1r = findViewById(R.id.name1); ed2r = findViewById(R.id.violate); b1 = findViewById(R.id.sbt1); b2 = findViewById(R.id.ratv1); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(rapp.this,vrate.class); startActivity(i); } }); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { insert(); } }); } public void insert() { try { String name1 = ed1r.getText().toString(); String violate = ed2r.getText().toString(); SQLiteDatabase db = openOrCreateDatabase("SliteDb", Context.MODE_PRIVATE,null); // 修复:添加violate字段到表结构中 db.execSQL("CREATE TABLE IF NOT EXISTS violate(id INTEGER PRIMARY KEY AUTOINCREMENT,name1 VARCHAR,violate VARCHAR)"); // 修复:插入语句包含两个字段和对应的占位符 String sql = "insert into violate(name1,violate)values(?,?)"; SQLiteStatement statement = db.compileStatement(sql); statement.bindString(1,name1); // 新增:绑定第二个参数violate的值 statement.bindString(2, violate); statement.execute(); Toast.makeText(this,"Record added", Toast.LENGTH_LONG).show(); ed1r.setText(""); ed2r.setText(""); ed1r.requestFocus(); } catch (Exception ex) { // 打印异常堆栈方便调试 ex.printStackTrace(); Toast.makeText(this,"Record Fail",Toast.LENGTH_LONG).show(); } } }
额外提示:建议在catch块中打印异常堆栈(ex.printStackTrace()),这样能在Logcat中看到具体的错误原因,方便后续调试。
内容的提问来源于stack exchange,提问作者RGBisLyf
相关产品推荐
相关产品推荐

