java - 无法将数据插入到android中的sqlite中

标签 java android sqlite

我尝试将EditView中的数据插入到Sqlite中,但无法插入,然后关闭程序。如果我没有在所有编辑文本中输入任何值,则我的条件代码有效。当我填写所有字段并单击按钮“插入”后,它不起作用。我的插入代码有错误吗?

下面是我的java代码

public class FormPage extends AppCompatActivity implements View.OnClickListener {

public EditText KhId, Fname, Lname, sex, dob, address;
private Button btnadd, btnview, btnupdate;
SQLiteDatabase db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.form_page);

    KhId = (EditText)findViewById(R.id.editText);
    Fname = (EditText)findViewById(R.id.editText2);
    Lname = (EditText)findViewById(R.id.editText3);
    sex = (EditText)findViewById(R.id.editText4);
    dob = (EditText)findViewById(R.id.editText5);
    address = (EditText)findViewById(R.id.editText6);
    btnadd = (Button)findViewById(R.id.button5);
    btnview = (Button)findViewById(R.id.button6);
    btnupdate = (Button)findViewById(R.id.button7);

    btnadd.setOnClickListener(this);
    btnview.setOnClickListener(this);
    btnupdate.setOnClickListener(this);

    db = openOrCreateDatabase("UserInfo", Context.MODE_PRIVATE, null);
    db.execSQL("CREATE TABLE IF NOT EXISTS user(kh_id int primary key, fname varchar, lname varchar, sex varchar, dob date, address varchar)");
}

public void onClick(View view){
    if (view == btnadd) {
        if (KhId.getText().toString().equals("0")) {
            showMessage("Error", "Zero is invalid for" + " input to database");
        } else {
            if (KhId.getText().toString().equals("") || Fname.getText().toString().equals("") || Lname.getText().toString().equals("") ||
                    sex.getText().toString().equals("") || dob.getText().toString().equals("") || address.getText().toString().equals("")) {
                showMessage("Error", "Please enter all values");
                return;
            }
            Cursor c = db.rawQuery("Select kh_id From user " + "where kh_id='" +
                    KhId.getText().toString() + "'", null);

            if (c.moveToFirst()) {
                showMessage("Error", "Record already exists");
                clearText();
            } else {
                db.execSQL("INSERT INTO user VALUES(" + KhId.getText() + ",'" + Fname.getText() + "','" + Lname.getText()+"','"+ sex.getText()+"','"+
                        dob.getText() + "'," + address.getText() + ");");
                showMessage("Successful", "Record added");
                clearText();
            }
        }
    }
}
 private void showMessage(String title, String msg) {
  // code
 } 
 public void Clear() {
  // code
 } 

最佳答案

您可以使用ContentValue类将数据插入表中。这也将防止 SQL injection .

您还需要使用insert()SQLiteDatabase中。

ContentValues values = new ContentValues();
values.put(COL_2, KhId.getText().toString());
values.put(COL_3, Fname.getText().toString());
values.put(COL_4, Lname.getText().toString());
values.put(COL_5, sex.getText().toString());
values.put(COL_6, dob.getText().toString());
values.put(COL_7, address.getText().toString());

long res = db.insert(TABLE_NAME, null, values);

最后,请记住使用正确的naming conventions .

关于java - 无法将数据插入到android中的sqlite中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45385710/

相关文章:

python - sqlalchemy.exc.IntegrityError : (sqlite3. IntegrityError) UNIQUE 约束失败 : users. 登录

java - 寻找一种在 android studio (java) 中的基于文本的游戏中保存游戏数据的方法

java - junit 构造函数在测试方法之后运行

android - cordova 平台添加 android - 不适用于 Mac Os

android - 是否可以在没有设备 PIN 的情况下在 ICS 上使用 android keystore 守护进程?

python - 使用 python sqlite3 将行插入 sqlite 数据库的简要语法

Java Servlet - 重定向 URL

java - 如何从PreparedStatement 中获取错误或警告?

android - React Native 测试 404 网络图像

javascript - 从使用 .then() 的 Promise 转换为 async/await