`
zhouxiaoli521
  • 浏览: 561604 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android SqLitOpenHelper操作数据库

阅读更多

做android中一个最常用的就是数据库的操作了,我们在android提供的SqLitOpenHelper上稍稍加工,就可以很方便的对数据进行操作。

public class DatabaseHelper extends SQLiteOpenHelper {
 
    public static final String COLUMN_ID = "_id";
    
    
    private String tableName;
    private Map<String, String> tableContent;
    
    DatabaseHelper(Context context, String name, CursorFactory cursorFactory,
            int version) {
        super(context, name, cursorFactory, version);
        this.tableName = null;
        this.tableContent = new HashMap<String, String>();
    }
 
    public void setTableAttr(String tableName, Map<String, String> tableContent)
    {
        this.tableName = tableName;
        this.tableContent = tableContent;
    }
    
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        if( this.tableName == null ||
                this.tableContent.size() == 0)
        {
            return;
        }
        
        String sql = "create table if not exists ";
        sql += this.tableName;
        sql +="(";
        sql += COLUMN_ID;
        sql += " integer primary key,";
        
        
        Set set = tableContent.entrySet();
        Iterator iterator = set.iterator();
        int index = 0;
        while (iterator.hasNext()) {
            index++;
            Map.Entry mapEntry = (Map.Entry) iterator.next();
            if (mapEntry.getValue() != null) {                
                sql += (String) mapEntry.getKey();
                sql += " ";
                sql += (String) mapEntry.getValue();
                
                if( index < this.tableContent.size())
                {
                    sql += ",";
                }
                
            }
        }
        
        sql += ")";
        
        db.execSQL( sql );
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        this.onCreate(db);
    }
 
}
 

下来我们写一个数据库表的基类:

public abstract class Table {
//    public static int _DATA_CACHE_VERSION_ = 1;
 
    private static final String DB_NAME = "XXXXXX.db";
 
    protected String tableName;
 
    private final Context mContext;
 
    protected CursorFactory mFactory;
 
    protected Map<String, String> tableContent;
 
    private SQLiteDatabase mDataBase;
 
    protected DatabaseHelper dbHelper;
    
    protected String mColumnIdInMedia;
 
    private boolean mIsInit;
    
    protected int _DATA_CACHE_VERSION_ = 0;
 
    public Table(Context ctx) {
        this.mContext = ctx;
        this.tableContent = new HashMap<String, String>();
        mIsInit = false;
        this.mFactory = null;
        mColumnIdInMedia = null;
        this.getClass().getSimpleName().toLowerCase();
    }
 
    protected abstract void _init();
    public void init() {
        if (mIsInit) {
            return;
        }
 
        _init();
        
        dbHelper = new DatabaseHelper(mContext, DB_NAME, mFactory,
                _DATA_CACHE_VERSION_);
 
        this.setTableAttr();
 
        dbHelper.setTableAttr(tableName, tableContent);
        mDataBase = dbHelper.getWritableDatabase();    
        
        
 
        mIsInit = true;
    }
 
    protected abstract void setTableAttr();
 
    public boolean insert(ContentValues values) {
 
        if (mDataBase == null) {
            return false;
        }
 
        mDataBase.insert(this.tableName, null, values);
 
        return true;
    }
 
    public boolean delete(String whereClause) {
 
        if (mDataBase == null) {
            return false;
        }
 
        mDataBase.delete(this.tableName, whereClause, null);
        return true;
    }
 
    public boolean update(ContentValues values, String whereClause) {
        if (mDataBase == null) {
            return false;
        }
 
        mDataBase.update(this.tableName, values, whereClause, null);
        return true;
    }
 
    private Cursor query(String columnName, int id) {
        if (mDataBase == null) {
            return null;
        }
 
        if( mColumnIdInMedia == null ||
                mColumnIdInMedia.equalsIgnoreCase(""))
        {
            mColumnIdInMedia = DatabaseHelper.COLUMN_ID;
        }
        
        Cursor cursor = mDataBase.query(this.tableName, new String[] {columnName, mColumnIdInMedia}, null, null, null,
                null, "_id asc");
        
        int _idIndex = cursor.getColumnIndex(mColumnIdInMedia);
        
        if(_idIndex != -1)
        {
            for (cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()) {
                if( id == cursor.getInt(_idIndex))
                {
                    return cursor;
                }
            }    
        }            
 
        cursor.close();
        return null;
        
    }
    
    public String queryString(String columnName, int id)
    {
        Cursor cursor = query( columnName, id);    
        
        String value = null;
        
        if(cursor != null)
        {
            value = cursor.getString(0);
            cursor.close();
        }
        
        return value;
    }
    
    public int queryInteger(String columnName, int id)
    {
        Cursor cursor = query( columnName, id);    
        
        int value = -1;
        
        if(cursor != null)
        {
            value = cursor.getInt(0);
            cursor.close();
        }
        
        return value;
    }
    
    public double queryDouble(String columnName, int id)
    {
        Cursor cursor = query( columnName, id);    
        
        double value = -1;
        
        if(cursor != null)
        {
            value = cursor.getDouble(0);
            cursor.close();
        }
        
        return value;
    }
 
    public void Release() {
 
        if( this.mDataBase != null )
        {
            this.mDataBase.close();
            this.mDataBase = null;
        }
        
        this.mIsInit = false;
    }
 
}
 

下来写具体的表了:

public class ImageTable extends Table {
    public static final int DATA_CACHE_VERSION_ = 1;
    
    public static final String COLUMN_WIDTH = "width";
 
    public static final String COLUMN_HEIGHT = "height";
 
    public static final String COLUMN_LASTTIME = "lasttime";
 
    public static final String COLUMN_DATA = "_data";
    
    public static final String COLUMN_ID_IMAGE = "_id_image";
 
    public ImageCache(Context ctx) {
        super(ctx);
        // TODO Auto-generated constructor stub
    }
 
    @Override
    protected void setTableAttr() {
        // TODO Auto-generated method stub
        this.mColumnIdInMedia = COLUMN_ID_IMAGE;
 
        this.tableContent.clear();
 
        this.tableContent.put(COLUMN_ID_IMAGE, "integer");
        this.tableContent.put(COLUMN_WIDTH, "integer");
        this.tableContent.put(COLUMN_HEIGHT, "integer");
        this.tableContent.put(COLUMN_LASTTIME, "integer");
        this.tableContent.put(COLUMN_DATA, "varchar");
    }
 
    @Override
    protected void _init() {
        // TODO Auto-generated method stub
        _DATA_CACHE_VERSION_ = DATA_CACHE_VERSION_;
    }
}
 

到这里所有的工作都准备好了,下来看看怎么用这些个东西来操作数据库:

1、新增一条记录:

Table imagTable = new ImageTable(ctx);
imageTable.init();
 
ContentValues values = new ContentValues();
    values.put(ImageTable.COLUMN_DATA,
            "/mnt/sdcard/image/xxx.jpg");
    values.put(ImageTable.COLUMN_HEIGHT,
            300);
    values.put(ImageTable.COLUMN_WIDTH, 400);
    values.put(ImageTable.COLUMN_LASTTIME,
            123123123123);
imageTale.insert(values);
 
imageTale.Release();
 

2、删除记录:

Table imagTable = new ImageTable(ctx);
imageTable.init();
 
imageTale.delete(ImageTable.COLUMN_LASTTIME + "=45554837");
imageTale.delete(DatabaseHelper.COLUMN_ID + "=3");
 
imageTale.Release();
 

3、更新一条记录:

Table imagTable = new ImageTable(ctx);
imageTable.init();
 
ContentValues values = new ContentValues();
    values.put(ImageTable.COLUMN_DATA,
            "/mnt/sdcard/image/xxx.jpg");
    values.put(ImageTable.COLUMN_HEIGHT,
            300);
    values.put(ImageTable.COLUMN_WIDTH, 400);
    values.put(ImageTable.COLUMN_LASTTIME,
            123123123123);
            
imageCache.update(values, DatabaseHelper.COLUMN_ID + "=3");
 
imageTale.Release();
 

4、当然还有一个很重要的就是查询:

Table imagTable = new ImageTable(ctx);
imageTable.init();
 
int width = imagTable.queryInteger(ImageTable.COLUMN_WIDTH, 1);
                        
String str = imagTable.queryString(ImageTable.COLUMN_DATA, 1);
imageTale.Release();
 

基本的功能都全了,日常再用都再接着完善了,使用还算方便吧, 多张表也是这样使用,我用每个类的名字转为小写做为表的名称。

 

http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966082.html

分享到:
评论

相关推荐

    Android异步操作数据库

    因此,"Android异步操作数据库"是一个至关重要的知识点,它涉及到如何在后台线程中安全、高效地处理数据库事务,避免阻塞UI。 1. **AsyncTask** Android提供了一个内置的异步任务类`AsyncTask`,适用于短时间的...

    android操作数据库Sqlite源代码

    以上是基于Android操作SQLite数据库的一些核心概念和源代码组织方式。实际开发中,还需要考虑数据同步、数据备份、数据加密等高级功能,以及性能优化,如批量插入、使用索引等。学习并理解这些知识点,将有助于你更...

    Android源码——数据库SQLite.zip

    总的来说,"Android源码——数据库SQLite.zip"的内容涵盖了SQLite在Android中的使用、数据库的创建与管理、SQL操作、事务处理、性能优化等方面的知识,对于深入理解Android应用的数据存储机制具有很高的学习价值。

    android操作数据库实例

    在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络。一.SharedPreferences方式二.文件存储方式三.SQLite数据库方式四.内容提供器(Content ...

    android对sqlite数据库的操作

    1. 创建`SQLiteOpenHelper`子类:在Android中,我们通常通过继承`SQLiteOpenHelper`类来创建和操作数据库。这个类帮助我们管理数据库的版本,以及在升级时执行DDL(数据定义语言)语句。 2. 实现关键方法:`onCreate...

    android,sqlist数据库操作

    Android SQLite 数据库操作详解 Android 中的 SQLite 数据库操作是指使用 SQLiteDatabase 类来对 SQLite 数据库进行创建、查询、更新和删除等操作。这个类提供了多种方法来实现这些操作,其中最重要的两个方法是 ...

    Android直接操作数据库

    在Android开发中,直接操作数据库是一种常见的数据存储方式,它允许开发者存储和检索应用程序的数据。Android支持SQLite数据库,这是一个轻量级的关系型数据库,特别适合移动设备,因为它占用资源少,运行速度快,且...

    Android 操作数据库实例.zip

    本实例的"Android 操作数据库实例.zip"提供了完整的源代码,涵盖了数据库的基本操作,如添加(Insert)、查询(Query)、更新(Update)和删除(Delete)。这些操作对于理解和实践Android数据库编程至关重要。 1. ...

    Android之Sqlite数据库操作实例

    本实例将深入探讨如何在Android中使用SQLite数据库进行基本的操作,包括创建数据库、创建表、插入数据、查询数据以及更新和删除数据。 首先,我们来了解SQLite在Android中的使用基础。Android系统会为每个应用程序...

    Android操作SQLite数据库Demo

    这个"Android操作SQLite数据库Demo"将展示如何在Android环境中有效地利用SQLite进行数据管理。以下是一些关键知识点: 1. **SQLiteOpenHelper**: Android提供了`SQLiteOpenHelper`类来帮助我们管理SQLite数据库,...

    android连接电脑数据库

    这些实例涵盖了从基本的SQLite操作到复杂的网络数据库交互,对于学习和理解Android如何连接电脑数据库具有很高的参考价值。通过学习这些例子,开发者可以掌握到Android数据库连接的多种技术和实践策略,提升自己的...

    演示Android操作数据库例子

    在这个"演示Android操作数据库例子"中,我们将探讨如何使用Android的SQLite数据库以及DBHelper类来实现常见的数据库操作。 首先,Android中的SQLite数据库操作通常通过SQLiteOpenHelper这个辅助类进行。...

    android操作MySQL数据库

    在Android平台上进行MySQL数据库操作是一项常见的任务,尤其是在开发需要与远程服务器交互的移动应用时。本文将详细讲解如何在Android应用中使用Java Database Connectivity (JDBC) 连接MySQL数据库,实现数据的增删...

    Android操作 自带数据库 SQLite

    本篇将深入探讨如何在Android中进行SQLite数据库的操作,包括创建数据库、创建表、读取数据、插入数据、更新数据以及删除数据。 首先,我们需要创建一个SQLite数据库。在Android中,我们通常通过扩展...

    android数据库操作实例

    总结来说,这个"android数据库操作实例"涵盖了Android应用中使用SQLite数据库的基础知识,包括创建数据库、定义表结构、插入、查询、更新和删除数据等操作。通过学习这个实例,开发者可以更好地理解如何在Android...

    android 的sqlite数据库加密实现

    在Android应用开发中,SQLite是一个常用的轻量级数据库,它为数据存储提供了便利。然而,随着数据安全性的日益重要,对SQLite数据库进行加密是必要的,以保护敏感信息免受未授权访问。本篇文章将深入探讨如何在...

    Android实现查询数据库,把数据库内容显示到屏幕

    在Android应用开发中,数据库是存储和管理应用程序数据的关键组件。SQLite是一个轻量级的、关系型数据库,它是Android系统内置的默认数据库,非常适合用于移动设备。本教程将详细介绍如何在Android应用中查询SQLite...

    android 简单的数据库程序

    本篇文章将深入探讨如何在Android中创建一个简单的数据库程序,包括增加和删除数据的操作。 首先,Android系统支持SQLite数据库,这是一个轻量级的关系型数据库,非常适合移动设备使用。SQLite数据库无需单独的...

    android读取sqlite数据库的数据并用listview显示

    在Android开发中,SQLite是一个内置的轻量级数据库系统,用于存储应用程序的结构化数据。本教程将详述如何在Android应用中读取SQLite数据库的数据并利用ListView进行展示。 首先,我们需要创建SQLite数据库。在...

    android本地读取数据库db文件查询本地归属地

    在Android开发中,有时我们需要对本地数据进行操作,例如查询手机中的电话归属地信息。这个项目就是一个关于如何在Android应用中本地读取SQLite数据库(db文件)查询归属地的示例。下面将详细介绍这个过程涉及的关键...

Global site tag (gtag.js) - Google Analytics