重复值未插入sqlite数据库

问题描述 投票:0回答:2

在我的Android应用程序中,当我插入重复的值时,它不会显示在数据库中,本质上我正在做的是将srting分成两半,并通过insertdata()插入一列中的一个字符串,并通过insertdata1()插入第二列中的第二个字符串以下是我的代码

主要

  public  void AddData() {
    btnAddData.setOnClickListener(new View.OnClickListener() {
                                      @Override
                                      public void onClick(View v) {
                                          Spinner dropdown = findViewById(R.id.spinner1);
                                          Spinner dropdown1 = findViewById(R.id.spinner2);
                                          Spinner dropdown2 = findViewById(R.id.spinner3);
                                          Spinner dropdown3 = findViewById(R.id.spinner4);
                                          String join = "-";
                                          String ConcatedString = dropdown.getSelectedItem().toString().concat(join).concat(dropdown1.getSelectedItem().toString());
                                          String ConcatedString1 = dropdown2.getSelectedItem().toString().concat(join).concat(dropdown3.getSelectedItem().toString());
                                          TextView h = (TextView) findViewById(R.id.text_view_id);
                                          h.setText(ConcatedString);
                                          TextView h1 = (TextView) findViewById(R.id.text_view_id1);
                                          h1.setText(ConcatedString1);



                                          String search = h.getText().toString();

                                              myDb.insertData(h.getText().toString());
                                              myDb.insertData1(h1.getText().toString());
                                              Toast.makeText(MainActivity.this,"showing"+search,Toast.LENGTH_LONG).show();

                                      }
                                  }
    );
}

数据库助手

public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME + " ( name VARCHAR UNIQUE, name1 VARCHAR UNIQUE)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

public void insertData(String name) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2,name);
    long result = db.insert(TABLE_NAME,null ,contentValues);


}

public void insertData1(String name1) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_3,name1);
    long result = db.insert(TABLE_NAME,null ,contentValues);


}







public Cursor getAllData() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from " + TABLE_NAME, null);
    return res;
}

}

java android database sqlite
2个回答
2
投票

它写在你的表格描述中:

db.execSQL(“create table”+ TABLE_NAME +“(name VARCHAR UNIQUE,name1 VARCHAR UNIQUE)”);

您的两列是唯一的,因此它们不接受重复的值。您应该删除这两列的UNIQUE,并添加一个将自动生成的ID列。

db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VARCHAR, name1 VARCHAR)");

你的插入方法有错误。您无法插入COL_1或COL_3,因为它们不是您的列名称。你应该写这个=>

在你的第一个方法=>

contentValues.put("name",name);

在你的第二种方法=>

contentValues.put("name1",name1);

为什么不只编写一种插入数据的方法?这样,您的数据库中应该只有一行。但也许这就是你想要的?我会写这个方法:

public void insertData(String name, String name1) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("name",name);
    contentValues.put("name1",name1);
    long result = db.insert(TABLE_NAME,null ,contentValues);
}

0
投票

在您的数据库帮助程序类中修改onCreate方法。删除名称和名称1中的UNIQUE。如果您的列是UNIQUE,则不能两次插入相同的值。创建ID列以提供主键和自动增量ID。代码应如下所示。

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME + " ( ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, name1 TEXT)");
}
© www.soinside.com 2019 - 2024. All rights reserved.