【发布时间】:2021-12-28 05:48:02
【问题描述】:
这是我的代码:
final String[] names_list = { "apple", "banana", "orange" };
final int[] preview_list = { "R.drawable.apple", "R.drawable.banana", "R.drawable.orange" };
final int[] colors_list = { "red", "yellow", "orange" };
int random = (int) (Math.random() * 3);
String name= names_list[random];
int preview= preview_list[random];
int color= colors_list[random];
helper = new DatabaseHelper(getApplicationContext());
helper.insertIntoDB(name, preview, color);
事实证明( int random = (int) (Math.random() * 3); )代码生成一个从 1 到 3 的随机数(取决于每个列表中数组的计数),然后例如如果变量 random 为 1,DatabaseHelper 将数组列表的第一个数组插入数据库(“apple”、“R.drawable.apple”和“red”),而 names_list 数组列表中的数组“apple”将作为主要唯一值插入.我的问题是,我可以做些什么来防止我的程序将重复数据插入数据库,例如,如果变量 random 第二次变为 1 程序忽略它并生成一个新的变量随机数。
这里是数据库模型:
public class DatabaseModel {
private String name;
private int preview;
private int color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPreview() {
return preview;
}
public void setPreview(int preview) {
this.preview = preview;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
和数据库助手
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="fruits";
private static final int DATABASE_VERSION = 1;
private static final String FRUITS_TABLE = "fruitsreg";
private static final String FS_TABLE = "create table "+FRUITS_TABLE +"(name TEXT primary key,preview TEXT, color TEXT)";
Context context;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(FS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + FRUITS_TABLE);
// Create tables again
onCreate(db);
}
/* Insert into database*/
public void insertIntoDB(String name, int preview, int color){
Log.d("insert", "before insert");
// 1. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
// 2. create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put("name", name);
values.put("preview", String.valueOf(preview));
values.put("color", color);
// 3. insert
db.insert(FRUITS_TABLE, null, values);
// 4. close
db.close();
Toast.makeText(context, "insert value", Toast.LENGTH_LONG);
Log.i("insert into DB", "After insert");
}
/* Retrive data from database */
public List<DatabaseModel> getDataFromDB(){
List<DatabaseModel> modelList = new ArrayList<DatabaseModel>();
String query = "select * from "+FRUITS_TABLE;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query,null);
if (cursor.moveToFirst()){
do {
DatabaseModel model = new DatabaseModel();
model.setName(cursor.getString(0));
model.setPreview(cursor.getInt(1));
model.setColor(cursor.getInt(2));
modelList.add(model);
}while (cursor.moveToNext());
}
Log.d("Fruits database data", modelList.toString());
return modelList;
}
【问题讨论】:
-
可以发一下
insertIntoDB函数的代码吗? -
我不是一个好的解决方案,但您可以使用临时列表和大小创建一个随机数。当你插入一个项目,然后删除临时列表的项目并重复这个过程,现在大小是 2,最后是 1。
-
@Luca Pizzini 我会尽快发布
-
@Luca Pizzini 嘿朋友我更新了帖子如果你不介意可以帮忙吗?
标签: android android-sqlite android-database