Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何阻止数据库重新插入已手动插入的项目?_Android_Sqliteopenhelper - Fatal编程技术网

Android 如何阻止数据库重新插入已手动插入的项目?

Android 如何阻止数据库重新插入已手动插入的项目?,android,sqliteopenhelper,Android,Sqliteopenhelper,我有一个databasehelper和一个活动,代码如下。我遇到的问题是,每次运行应用程序时,它都会重新插入已经插入的值。我不想发生这种事。我很想得到你的帮助 try { db.open(); long id; id=db.insertTitle("0470285818", "C# programmer", "wrox"); id=db.insertTitle("0907865", "Professional Windows",

我有一个databasehelper和一个活动,代码如下。我遇到的问题是,每次运行应用程序时,它都会重新插入已经插入的值。我不想发生这种事。我很想得到你的帮助

 try {
        db.open();
        long id;

        id=db.insertTitle("0470285818", "C# programmer", "wrox");
        id=db.insertTitle("0907865", "Professional Windows", "wrox");


        Cursor c=db.getAllTitles();//using getTitle to get a particular row

        if(c.moveToFirst()){
            do{
                DisplayTitle(c);

            }while(c.moveToNext());
        }/*else   Toast.makeText(this, "No title found",  Use this when using getTitle
                Toast.LENGTH_LONG).show();*/
        db.close();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
DBhelper类转向inserttitle方法

private static final String DATABASE_CREATE=
            "create table if not exists titles (_id integer primary key autoincrement, "
            +"isbn text not null, title text not null, "
                    +"publisher text not null)";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx){
this.context=ctx;
DBHelper=new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){
    super(context,DATABASE_NAME,null,DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    Log.w(TAG, "Upgrading database from version "+oldVersion+" to "+newVersion+" which will distroy all old data");
    db.execSQL("DROP TABLE IF EXISTS titles");
    onCreate(db);


}
}
 public DBAdapter open()throws SQLException{
db=DBHelper.getWritableDatabase();
return this;

}
public void close(){
DBHelper.close();
}
public long insertTitle(String isbn,String title,String publisher){
ContentValues initialValues =new ContentValues();
initialValues.put(KEY_ISBN, isbn);
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_PUBLISHER, publisher);

return db.insertOrThrow(DATABASE_TABLE, null, initialValues);
}
   public boolean deleteTitle(long rowid){
return db.delete(DATABASE_TABLE, KEY_ROWID+"="+rowid, null)>0;
  }
  public Cursor getAllTitles() 
{
return db.query(DATABASE_TABLE, new String[] {
        KEY_ROWID, 
        KEY_ISBN,
        KEY_TITLE,
        KEY_PUBLISHER}, 
        null, 
        null, 
        null, 
        null, 
        null);
}
public Cursor getTitle(long rowid)throws SQLException{
Cursor mCursor=db.query(DATABASE_TABLE, new String[]{
        KEY_ROWID,KEY_ISBN,KEY_TITLE,KEY_PUBLISHER
}, KEY_ROWID+"="+rowid, null, null, null, null);

if(mCursor!=null){
    mCursor.moveToFirst();
}

return mCursor;

}
   public boolean updateTitle(long rowid,String isbn,String title,String publisher){

ContentValues args=new ContentValues();
args.put(KEY_ISBN, isbn);
args.put(KEY_TITLE, title);
args.put(KEY_PUBLISHER, publisher);

return db.delete(DATABASE_TABLE, KEY_ROWID+"="+rowid, null)>0;

}
}

您必须直接在
SqliteOpenHelper
实现的
onCreate(SQLiteDatabase db)
方法中插入值:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE); 
    String[] isbn = {"isbn1", "isbn2", "isbn3"};
    String[] title = {"title1", "title2", "title3"};   
    String[] publisher = {"pub1", "pub2", "pub3"};
    for (int i = 0; i < isbn.length; i++) {
        ContentValues initialValues =new ContentValues();
        initialValues.put(KEY_ISBN, isbn[i]);
        initialValues.put(KEY_TITLE, title[i]);
        initialValues.put(KEY_PUBLISHER, publisher[i]);
        db.insertOrThrow(DATABASE_TABLE, null, initialValues);
    }
}
@覆盖
public void onCreate(SQLiteDatabase db){
execSQL(创建数据库);
字符串[]isbn={“isbn1”、“isbn2”、“isbn3”};
字符串[]title={“title1”、“title2”、“title3”};
字符串[]publisher={“pub1”、“pub2”、“pub3”};
for(int i=0;i
您可以在插入之前查询数据库,查看内容是否已经存在。如果是,请不要再次插入