2013-12-20 34 views
1

我有一本书数据库,用户可以添加新书,但在添加之前,我想检查这本书是否在数据库中,或者不是由isbn编号..如何做到这一点?在添加android之前搜索

这是我的数据库帮手:

package com.example.mobilib; 

    import com.example.mobilib.LoginDataBaseAdapter; 

    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteOpenHelper; 
    import android.util.Log; 

    public class DbHelper extends SQLiteOpenHelper { 
static String DATABASE_NAME="M"; 
public static final String TABLE_NAME="Book"; 
public static final String KEY_NAME="name"; 
public static final String KEY_AUTHOR="author"; 
public static final String KEY_INFO="info"; 
public static final String KEY_ISBN="isbn"; 
public static final String KEY_COPIES="copy"; 
public static final String KEY_ID="id"; 
static String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY, "+KEY_NAME+" TEXT, "+KEY_AUTHOR+" TEXT, "+KEY_INFO+" TEXT, "+KEY_ISBN+" TEXT, "+KEY_COPIES+" TEXT)"; 

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

} 



@Override 
public void onCreate(SQLiteDatabase db) 

{ 
    try{ 
     db.execSQL(LoginDataBaseAdapter.DATABASE_CREATE);   
     db.execSQL(CREATE_TABLE); 
    }catch(Exception e){ 
     Log.e("dbAdapter", e.getMessage().toString()); 
    } 

} 








@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w("TaskDBAdapter", "Upgrading from version " +oldVersion + " to " +newVersion + ", which will destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 


    } 

} 

,这里是我的附加功能:

 // saveButton click event 
public void onClick(View v) { 
    name=edit_name.getText().toString().trim(); 
    author=edit_author.getText().toString().trim(); 
    isbn=edit_isbn.getText().toString().trim(); 
    copy=edit_copy.getText().toString().trim(); 
    info=edit_info.getText().toString().trim(); 
    if(name.length()>0 && author.length()>0 && isbn.length()>0 && copy.length()>0 && info.length()>0) 
    { 
     saveData(); 
    } 
    else 
    { 
     AlertDialog.Builder alertBuilder=new AlertDialog.Builder(AdminAddBook.this); 
     alertBuilder.setTitle("Invalid Data"); 
     alertBuilder.setMessage("Please, Enter valid data"); 
     alertBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 

      } 
     }); 
     alertBuilder.create().show(); 
    } 

} 

/** 
* save data into SQLite 
*/ 
private void saveData(){ 
    dataBase=mHelper.getWritableDatabase(); 
    ContentValues values=new ContentValues(); 

    values.put(DbHelper.KEY_NAME,name); 
    values.put(DbHelper.KEY_AUTHOR,author); 
    values.put(DbHelper.KEY_ISBN,isbn); 
    values.put(DbHelper.KEY_COPIES,copy); 
    values.put(DbHelper.KEY_INFO,info); 

    System.out.println(""); 
    if(isUpdate) 
    {  
     //update database with new data 
     dataBase.update(DbHelper.TABLE_NAME, values, DbHelper.KEY_ID+"="+id, null); 
    } 
    else 
    { 
     //insert data into database 
     dataBase.insert(DbHelper.TABLE_NAME, null, values); 
    } 
    //close database 
    dataBase.close(); 
    finish(); 


} 

    } 

我想是将之前搜索..如果这个ISBN号码没有在存在数据库然后添加它,如果它存在然后不保存它。

有人可以帮我吗? 谢谢!

回答

0

写在你的治疗者类上检查ISBN现有的记录功能,将返回FALSE TRUE 。 在插入记录之前调用此函数,如果它的返回值为true意味着记录存在,否则不存在。如果它返回false,则插入记录。

protected void onCreate(Bundle savedInstanceState) { 
     ...... 
     DBHelper dbHelper = new DBHelper(YourActivity.this); 
    } 
数据库帮手

:在saveData()

public boolean isExist(String isbnNo) 
{ 
    SQLiteDatabase db; 
    db = this.getWritableDatabase(); 
    String query= "select * from TABLE_NAME where KEY_ISBN='"+isbnNo+"' ";  

    Cursor cursor=db.rawQuery(query, null); 

    if(cursor.getCount()<1) // UserName Not Exist 
    { 
     cursor.close(); 
     return false; 
    } 

    cursor.close(); 
    return true;     
} 

调用上面的函数,即

private void saveData(){ 
    dataBase=mHelper.getWritableDatabase(); 
    ContentValues values=new ContentValues(); 

    values.put(DbHelper.KEY_NAME,name); 
    values.put(DbHelper.KEY_AUTHOR,author); 
    values.put(DbHelper.KEY_ISBN,isbn); 
    values.put(DbHelper.KEY_COPIES,copy); 
    values.put(DbHelper.KEY_INFO,info); 

    System.out.println(""); 
    if(isUpdate) 
    {  
     //update database with new data 
     dataBase.update(DbHelper.TABLE_NAME, values, DbHelper.KEY_ID+"="+id, null); 
    } 
    else 
    { 
     //insert data into database 
    if(!dbHelper.isExist(isbn) 
      dataBase.insert(DbHelper.TABLE_NAME, null, values); 
    } 
    //close database 
    dataBase.close(); 
    finish(); 


} 
+0

非常感谢回复!我尝试了它,当我点击保存按钮时,应用程序会崩溃:( –

+0

这是正确的?>>'DbHelper dbHelper = new DbHelper(getApplicationContext());' –

+0

@LamaTatwany是的,如果问题没有解决,那么post logcat error message。 –

0

Initailize的DBHelper在活动的onCreate

DBHelper dbHelper = new DBHelper(YourActivity.this); 

您的储蓄功能

// saveButton click event 
public void onClick(View v) { 
    name = edit_name.getText().toString().trim(); 
    author = edit_author.getText().toString().trim(); 
    isbn = edit_isbn.getText().toString().trim(); 
    copy = edit_copy.getText().toString().trim(); 
    info = edit_info.getText().toString().trim(); 
    String existingIsbn = dbHelper.getSinlgeEntry(name); 
    // User not exist 
    if(existingIsbn.equals("NOT EXIST")){ 
     //save the data 
    } 
} 
+0

对不起getSingleEntry没有可能工作..我用它尝试,却忘了删除我的ROM码。没有其他解决方案吗? –

相关问题