#android #database #android-sqlite
#Android #База данных #android-sqlite
Вопрос:
У меня есть приложение, в котором мне нужен один ввод данных только один раз. Я искал решение и применил его, но все равно снова вставил ту же запись данных.
Мой код выглядит следующим образом:
В классе SQLiteHelper (метод Insert):
public boolean insertData(ContactModel contactModel) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(col_0,contactModel.getId());
contentValues.put(col_1,contactModel.getName());
contentValues.put(col_2,contactModel.getNumber());
contentValues.put(col_3,contactModel.getColor());
contentValues.put(col_4,contactModel.getFSize());
// long result =db.insert(Table_name,null,contentValues);
long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);
if(result == -1){
return false;
}else{
return true;
}
}
метод в activity для вставки данных:
public void DataAdd(String name,String num,int color,int size){
boolean indata = myhelper.insertData(new ContactModel(name,num,color,size));
if (indata == true) {
Toast.makeText(getApplicationContext(),"DataSave",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(),"In Data not True",Toast.LENGTH_SHORT).show();
}
}
Таблица ящиков:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " Table_name "(Id INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, NUMBER TEXT, COLOR INTEGER, FSIZE INTEGER) ");
}
Комментарии:
1. Почему вы не используете первичный ключ для этой таблицы?
2. я использую это, вы можете видеть в сейчас, я редактирую сообщение
3. удалите приложение, переустановите приложение и повторите попытку
4. @vasudev все тот же, если у вас есть какой-либо другой способ достижения того же результата, сообщите мне
5. удалите это ContentValues.put(col_0,contactModel.getId()); удалите приложение и запустите приложение
Ответ №1:
когда таблица определения должна использовать первичный ключ для идентификатора :
private static final String DB_CREATE_MY_TABLE = "CREATE TABLE " TABLE_NAME " ( "
" id INTEGER PRIMARY KEY ,"
" xofId INTEGER NULL,"
" code INTEGER NULL"
");";
если вы хотите увеличить автоматическое использование идентификатора :
id INTEGER PRIMARY KEY AUTOINCREMENT,
Комментарии:
1. в вашей деятельности используйте запрос
SELECT COUNT(1) FROM table WHERE NAME = name and ....
если результат равен нулю, insertData() .2. и если вы используете АВТОИНКРЕМЕНТ для id, необходимо удалить
contentValues.put(col_0,contactModel.getId());