2011-12-31 83 views
0

我正在寫一個通用的SQLHelper類用於我的android項目。不過,我是有關android的新手,因此我不知道應該使用哪個庫來返回數據。我的DBHelper延伸SQLiteOpenHelper,我使用該類的方法。Android DB助手類

對於「選擇」查詢,我應該返回哪種類型? (在.NET中爲DataSet) 對於「更新」查詢,我應該得到什麼參數?

我想生成SQL查詢。

即插入,我用ContentValuesTableName參數。

回答

3

看看我用來製作一個示例項目的代碼。只要執行和使用SQLitedatabase,它就會爲您提供一切您需要知道的信息。它回答你的兩個問題。 該示例將書中用戶的書名,作者,isbn編號,評分和狀態插入到數據庫中,允許將數據更新刪除並逐個提取。

public class DbAdapter { 


    private static final String DATABASE_NAME = " nba"; 
    private static final String DATABASE_TABLE = "bookList"; 
    private static final int DATABASE_VERSION = 1; 
    private static String TAG = "Upgrading Database!"; 
    public static final String KEY_BOOK = "book"; 
    public static final String KEY_AUTHOR = "author"; 
    public static final String KEY_ISBN = "isbn"; 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_RATING = "rating"; 
    public static final String KEY_STATUS = "status"; 


    private DatabaseHelper mDbHelper; 
    private SQLiteDatabase mDb; 


    private static final String DATABASE_CREATE = 
      " create table " + DATABASE_TABLE + " (" 
      + KEY_ROWID + " integer primary key autoincrement, " 
      + KEY_AUTHOR + " text not null, " 
      + KEY_BOOK + " text not null, " 
      + KEY_RATING + " text not null, " 
      + KEY_STATUS + " text not null, " 
      + KEY_ISBN + " text not null); "; 

    private final Context mCtx; 


    public DbAdapter (Context ctx){ 
     this.mCtx = ctx; 



      } 

      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) { 
        db.execSQL("ALTER TABLE bookList ADD COLUMN String status"); 

     } 
    } 
      public DbAdapter open() throws SQLException{ 

       mDbHelper = new DatabaseHelper(mCtx); 
       mDb = mDbHelper.getWritableDatabase(); 
       return this; 
      } 
      public void close(){ 
       mDbHelper.close(); 
      } 

      public long createBook(String book, String author, String isbn, float rating, String status){ 
       ContentValues initialValues = new ContentValues(); 
       initialValues.put(KEY_BOOK, book); 
       initialValues.put(KEY_AUTHOR, author); 
       initialValues.put(KEY_ISBN, isbn); 
       initialValues.put(KEY_RATING, rating); 
       initialValues.put(KEY_STATUS, status); 



       return mDb.insert(DATABASE_TABLE, null, initialValues); 

      } 
      public boolean deleteBook(long rowId){ 
       return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 

      } 
      public Cursor fetchAllBooks(){   
       return mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_ISBN,KEY_AUTHOR,KEY_ROWID, KEY_RATING, KEY_STATUS}, null, null, null, null, null); 
      } 
      public Cursor fetchBook(long rowId) throws SQLException{ 
       Cursor mCursor = 
       mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_AUTHOR,KEY_ROWID, KEY_ISBN, KEY_RATING, KEY_STATUS}, KEY_ROWID + "=" + 
          rowId, null, null, null, null); 

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

      } 
      public boolean updateBook(long rowId, String book, String author, String isbn, float rating, String status){ 
       ContentValues args = new ContentValues(); 
       args.put(KEY_BOOK, book); 
       args.put(KEY_AUTHOR, author); 
       args.put(KEY_ISBN, isbn); 
       args.put(KEY_RATING, rating); 
       args.put(KEY_STATUS, status); 


       return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)> 0; 


      } 


} 
+0

感謝您的回答。我將使用Cursor類來返回數據。但我不知道android是否有更好的類來返回數據?像DataSet一樣,更有用一個? – ahmet 2011-12-31 19:46:40

+1

光標是大多數開發人員使用的。在我4年的發展過程中,我沒有看到任何人使用其他任何東西。並不是說它無法完成。 – 2011-12-31 19:53:47

+0

然後確定。這意味着它對我也很有用。感謝您的回答。 – ahmet 2011-12-31 19:57:51