您的位置:首页 > 移动开发 > Android开发

android一个很好的数据库基类,利用此类非常方便构建数据库操作类

2010-12-08 10:56 411 查看
写应用程序难免要用的数据库操作,一个好用的类库可以为自己提供很大的方便。下面转了一个不错的,希望对和我一样的朋友有所帮助。

转自:http://www.cnblogs.com/liwqiang/archive/2010/08/08/1795193.html



import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public abstract class AbstractDBHelper
{
 // SQLite数据库实例 
 protected SQLiteDatabase mDb = null;
 //数据库创建帮手
 protected CreateDBHelper mDbHelper = null;
 //获得当前数据库帮手类标识(一般是该类名称),用于日志等的记录
 protected abstract String getTag();
 // 获得数据库名称
 protected abstract String getDatabaseName();
 /** 
 * 获得数据库版本,值至少为1。
 * 当数据库结构发生改变的时候,请将此值加1,系统会在初始化时自动调用
 * createDBTables和dropDBTables方法更新数据库结构。
 */
 protected abstract int getDatabaseVersion();
 // 创建数据库表的SQL语句,一个元素一条语句
 protected abstract String[] createDBTables();
 //删除数据库表的SQL语句,一个元素一条语句
 protected abstract String[] dropDBTables();
 // 内部数据库创建帮手类
 private class CreateDBHelper extends SQLiteOpenHelper
 {
  public CreateDBHelper(Context ctx)
  {
      super(ctx, getDatabaseName(), null, getDatabaseVersion());
  }
  @Override
  public void onCreate(SQLiteDatabase db)
  {
     executeBatch(createDBTables(), db);
  }
 
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
  {
   Log.w(getTag(), "Upgrading database '" + getDatabaseName() + "' from version " + oldVersion + " to " + newVersion);
   executeBatch(dropDBTables(), db);
   onCreate(db);
  }
 
  //批量执行Sql语句
  private void executeBatch(String[] sqls, SQLiteDatabase db)
  {
   if(sqls == null)
   {
     return;
   }
   
   db.beginTransaction();
   try
   {
       int len = sqls.length;
    for(int i = 0; i < len; i++)
    {
       db.execSQL(sqls[i]);
    }
       db.setTransactionSuccessful();
   }
   catch(Exception e)
   {
       Log.e(getTag(), e.getMessage(), e);
   }
   finally
   {
       db.endTransaction();
   }
  }
 }
 // 打开或者创建一个指定名称的数据库
 public void open(Context ctx)
 {
  Log.i(getTag(), "Open database '" + getDatabaseName() + "'");
  try
     {
    mDbHelper = new CreateDBHelper(ctx);
    if(mDbHelper!=null)
    {
     mDb = mDbHelper.getWritableDatabase();
       } 
     }
     catch(SQLException e)
     {
         Log.e("open", e.getMessage());
     }
  
 }
 //关闭数据库
 public void close()
 {
  try
  {
   if(mDbHelper != null)
   {
    Log.i(getTag(), "Close database '" + getDatabaseName() + "'");
    mDbHelper.close();
   }  
  }
  catch(SQLException e)
     {
         Log.e("close", e.getMessage());
     }
 }
 
 //执行sql
 protected void executeSQL(String sql)
 {
  if(sql.equals(""))
  {
    return;
  }
  
  try
  {
   mDb.execSQL(sql);
  }
  catch(SQLException e)
  {
   Log.i(getTag(),e.getMessage(),e);
  }
 }
 protected Cursor Query(String sql,String[] strArgs)
 {
  return mDb.rawQuery(sql,strArgs);
 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: