【问题标题】:static database class to use with any activity用于任何活动的静态数据库类
【发布时间】:2010-01-05 19:28:38
【问题描述】:

我是 Android 新手,我还没有开发任何关于 Android 数据库的应用程序。所以我有几个基本问​​题。我正在寻找一个好的数据库类示例,它可以让我运行 CRUD 操作。我想将其用作静态类,例如:

clsDB->Select("select * from clients");

objClient->Delete(clientid);

我想知道是否有人可以分享他的数据库类,如果更多人分享最好。 另外我想以多种方式重用这个类,我将有服务、活动等......

问候,
奔腾10

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    Notebook tutorial 提供的 SDK 将引导您了解按照您描述的方式使用系统上提供的 SQLite 数据库 ORM 的基础知识。

    【讨论】:

    • 这不是我想要的东西,它不适合我的需要。它是针对单个表的,不会继续升级旧数据,也不是静态类。如果可能的话,我需要某人的课。
    • 如果您要在人们提供答案后添加额外要求,您应该编辑您的原始问题。
    【解决方案2】:

    Dinedal 的回答很好 — 记事本教程是您了解 Android 数据库处理的良好起点。
    也可以查看 Android 网站上的其他代码示例。

    如果您想通过各种活动和服务以简单且一致的方式访问您的数据,您应该查看ContentProvider 文档。

    还有一个名为SQLiteOpenHelper 的类可以让您进行基本的SQLite 数据库管理和版本控制。使用起来非常简单。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      DBAdapter.java

      public class DBAdapter {
      
          private final int DATABASE_VERSION = 1;
          private final Context context;
          private DatabaseHelper DBHelper;
          private SQLiteDatabase db;
          public static final String DATABASE_NAME = "db_title";
          public static final String COLUMN_AUTO_INCREMENT_ID = "auto_increment_id";
          private onDBListeners mDbListener;
          public static final int actionGetAllData = 1, actionInsert = 2, actionUpdate = 3, actionDelete = 4, actionDeleteAll = 5;
          private Object object = null;
      
          public DBAdapter(Context ctx, onDBListeners listener) {
              context = ctx;
              DBHelper = new DatabaseHelper(context);
              mDbListener = listener;
          }
      
          private class DatabaseHelper extends SQLiteOpenHelper {
      
              public DatabaseHelper(Context context) {
                  super(context, DATABASE_NAME, null, DATABASE_VERSION);
              }
      
              @Override
              public void onCreate(SQLiteDatabase db) {
                  db.execSQL(CREATE_MY_TABLE);
              }
      
              @Override
              public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                  db.execSQL("DROP TABLE IF EXISTS Savedfiles");
                  onCreate(db);
              }
          }
      
          // ---open database---
          public DBAdapter open() throws SQLException {
              db = DBHelper.getWritableDatabase();
              return this;
          }
      
          // ---closes database---
          public void close() {
              DBHelper.close();
          }
      
          public boolean isValidCursor(Cursor cur){
              try {
                  if(cur!=null){
                      if(cur.getCount()>0){
                          return true;
                      }else{
                          return false;
                      }
                  }else{
                      return false;
                  }   
              } catch (Exception e) {
                  e.printStackTrace();
                  return false;
              }
          }
      
      
          // --- Table for Data ---
      
                  public static final String TABLE_NAME = "tbl_my_table", COLUMN_USER_ID = "user_id", COLUMN_USERNAME = "username";
      
                  private static String[] GET_ALL_DATA() {
                      String[] getMessagesData = new String[] {COLUMN_AUTO_INCREMENT_ID, COLUMN_USER_ID,COLUMN_USERNAME};
                      return getMessagesData;
                  }
      
                  private static final String CREATE_MY_TABLE = "create table "
                          + TABLE_NAME + "(" + COLUMN_AUTO_INCREMENT_ID + " integer primary key autoincrement, "
                          + COLUMN_USER_ID + " text not null, "
                          + COLUMN_USERNAME + " text);";
      
                  // ---insert data in database---
                  public void insertData(DataModel dataModel) {
                      open();
                      ContentValues initialValues = DataModel.getContentValues(dataModel);
                      boolean var = db.insert(TABLE_NAME, null, initialValues)>0;
                      if(var){
                          mDbListener.onOperationSuccess(TABLE_NAME, actionInsert, object);
                      }else{
                          mDbListener.onOperationFailed(TABLE_NAME, actionInsert);
                      }
                      close();
                  }
      
      
                  // ---get all data---
                  public void getAllData() {
                      open();
                      Cursor cur = db.query(TABLE_NAME, GET_ALL_DATA(), null, null,null, null, null);
                      if(cur!=null&&cur.getCount()>0){
                          mDbListener.onOperationSuccess(TABLE_NAME, actionGetAllData, cur);
                      }else{
                          mDbListener.onOperationFailed(TABLE_NAME, actionGetAllData);
                      }
      
                      cur.close();
                      close();
                  }
      
                  // ---get all data by id---
                  public void getAllDataByUserId(String userId) {
                      open();
                      Cursor cur = db.query(TABLE_NAME, GET_ALL_DATA(), COLUMN_USER_ID+ " = ?", new String[] {userId},null, null, null);
                      if (cur != null && cur.getCount() > 0) {
                          mDbListener.onOperationSuccess(TABLE_NAME, actionGetAllData, cur);
                      } else {
                          mDbListener.onOperationFailed(TABLE_NAME, actionGetAllData);
                      }
      
                      cur.close();
                      close();
                  }
      
                  // ---deletes all data---
                  public void deleteAllData() {
                      open();
                      boolean var = db.delete(TABLE_NAME, null, null)>0;
                      if(var){
                          mDbListener.onOperationSuccess(TABLE_NAME, actionDeleteAll, object);
                      }else{
                          mDbListener.onOperationFailed(TABLE_NAME, actionDeleteAll);
                      }
      
                      close();
                  }
      
                  // ---deletes single data---
                  public void deleteSingleData(String userId) {
                      open();
                      boolean var = db.delete(TABLE_NAME, COLUMN_USER_ID + "=" + userId, null) > 0;
                      if(var){
                          mDbListener.onOperationSuccess(TABLE_NAME, actionDelete, object);
                      }else{
                          mDbListener.onOperationFailed(TABLE_NAME, actionDelete);
                      }
      
                      close();
                  }
      
                  // ---updates a data details---
                  public void updateData(DataModel dataModel) {
                      open();
                      ContentValues initialValues = DataModel.getContentValues(dataModel);
                      boolean var = db.update(TABLE_NAME, initialValues, COLUMN_USER_ID + "="+ dataModel.getUserId(), null) > 0;
                      if(var){
                          mDbListener.onOperationSuccess(TABLE_NAME, actionUpdate, object);
                      }else{
                          mDbListener.onOperationFailed(TABLE_NAME, actionUpdate);
                      }
                      close();
                  }
              }
      

      DataModel.java类的方法下面添加

      public static ContentValues getContentValues(DataModel dataModel){
      
              ContentValues initialValues = new ContentValues();
      
              if(dataModel.getUserId()!=null){
                  initialValues.put(DBAdapter.COLUMN_USER_ID, dataModel.getUserId()); 
              }
      
              if(dataModel.getUserName()!=null){
                  initialValues.put(DBAdapter.COLUMN_USERNAME, dataModel.getUserName());  
              }
      
              return initialValues;
          }
      

      现在接口下方添加用于DbOperationListener

      public interface onDBListeners {
      
          public void onOperationSuccess(String tableName, int operation, Object obj);
      
          public void onOperationFailed(String tableName, int operation);
      }
      

      现在在 ActivityFragment实现 接口

       public class MyActivity implements onDBListeners{
      
          private DBAdapter mDbAdapter;
      
                 // Other stuff
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
      
          mDbAdapter = new DBAdapter(MyActivity.this, this);
      
      
      DataModel mDataModel = new DataModel();
      mDataModel.setUserId("1");
      mDataModel.setUserName("Hiren");
      mDbAdpter.insertData(mDataModel);
      
          }
      
      
      
          @Override
              public void onOperationSuccess(String tableName, int operation, Object obj) {
                  LogUtils.Log_e(TAG, "onOperationSuccess : Table Name - "+tableName+" : Table Operation - "+operation);
                  switch (operation) {
                  case DBAdapter.actionGetAllData:
                      Cursor cur = (Cursor) obj;
      
                      break;
                  case DBAdapter.actionInsert:
      
                      break;
                  case DBAdapter.actionUpdate:
      
                      break;
                  case DBAdapter.actionDelete:
      
                      break;
                  case DBAdapter.actionDeleteAll:
      
                      break;
                  default:
                      break;
                  }
      
              }
      
              @Override
              public void onOperationFailed(String tableName, int operation) {
                  LogUtils.Log_e(TAG, "onOperationFailed : Table Name - "+tableName+" : Table Operation - "+operation);
                  switch (operation) {
                  case DBAdapter.actionGetAllData:
      
                      break;
                  case DBAdapter.actionInsert:
      
                      break;
                  case DBAdapter.actionUpdate:
      
                      break;
                  case DBAdapter.actionDelete:
      
                      break;
                  case DBAdapter.actionDeleteAll:
      
                      break;
                  default:
                      break;
                  }
              }
          }
      

      就是这样

      【讨论】:

        【解决方案4】:

        试试 ActiveAndroid。这是一个示例项目:https://www.activeandroid.com/help/sample-project/

        【讨论】:

          【解决方案5】:

          您可以在以下位置查看 android-active-record 项目 http://code.google.com/p/android-active-record/ 尽管它侧重于 Java 持久模型,但您可以查看源代码和示例——您可以找到很多关于如何使用 SQLite 的有用示例

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-11-15
            • 2010-10-12
            • 1970-01-01
            • 1970-01-01
            • 2016-05-23
            • 1970-01-01
            • 2018-09-19
            相关资源
            最近更新 更多