2012-03-21 50 views
0

我有一个数据库帮助器和一个活动,代码如下。我遇到的问题是每次运行应用程序时都会重新插入已插入的值。我不希望发生这种情况。我会爱上索姆的帮助。如何阻止我的数据库重新插入已手动插入的项目?

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(); 
    } 

croped到inserttitle方法DBhelper类

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; 

} 
} 

回答

1

你必须直接插入您的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); 
    } 
} 
0

可以查询在插入数据库之前查看数据库,并查看内容是否已经存在。如果是,请不要再插入一次。