做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异步操作数据库"是一个至关重要的知识点,它涉及到如何在后台线程中安全、高效地处理数据库事务,避免阻塞UI。 1. **AsyncTask** Android提供了一个内置的异步任务类`AsyncTask`,适用于短时间的...
总的来说,"Android源码——数据库SQLite.zip"的内容涵盖了SQLite在Android中的使用、数据库的创建与管理、SQL操作、事务处理、性能优化等方面的知识,对于深入理解Android应用的数据存储机制具有很高的学习价值。
以上是基于Android操作SQLite数据库的一些核心概念和源代码组织方式。实际开发中,还需要考虑数据同步、数据备份、数据加密等高级功能,以及性能优化,如批量插入、使用索引等。学习并理解这些知识点,将有助于你更...
Android SQLite 数据库操作详解 Android 中的 SQLite 数据库操作是指使用 SQLiteDatabase 类来对 SQLite 数据库进行创建、查询、更新和删除等操作。这个类提供了多种方法来实现这些操作,其中最重要的两个方法是 ...
1. 创建`SQLiteOpenHelper`子类:在Android中,我们通常通过继承`SQLiteOpenHelper`类来创建和操作数据库。这个类帮助我们管理数据库的版本,以及在升级时执行DDL(数据定义语言)语句。 2. 实现关键方法:`onCreate...
在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络。一.SharedPreferences方式二.文件存储方式三.SQLite数据库方式四.内容提供器(Content ...
在Android开发中,直接操作数据库是一种常见的数据存储方式,它允许开发者存储和检索应用程序的数据。Android支持SQLite数据库,这是一个轻量级的关系型数据库,特别适合移动设备,因为它占用资源少,运行速度快,且...
本实例将深入探讨如何在Android中使用SQLite数据库进行基本的操作,包括创建数据库、创建表、插入数据、查询数据以及更新和删除数据。 首先,我们来了解SQLite在Android中的使用基础。Android系统会为每个应用程序...
这些实例涵盖了从基本的SQLite操作到复杂的网络数据库交互,对于学习和理解Android如何连接电脑数据库具有很高的参考价值。通过学习这些例子,开发者可以掌握到Android数据库连接的多种技术和实践策略,提升自己的...
这个"Android操作SQLite数据库Demo"将展示如何在Android环境中有效地利用SQLite进行数据管理。以下是一些关键知识点: 1. **SQLiteOpenHelper**: Android提供了`SQLiteOpenHelper`类来帮助我们管理SQLite数据库,...
本篇将深入探讨如何在Android中进行SQLite数据库的操作,包括创建数据库、创建表、读取数据、插入数据、更新数据以及删除数据。 首先,我们需要创建一个SQLite数据库。在Android中,我们通常通过扩展...
在这个"演示Android操作数据库例子"中,我们将探讨如何使用Android的SQLite数据库以及DBHelper类来实现常见的数据库操作。 首先,Android中的SQLite数据库操作通常通过SQLiteOpenHelper这个辅助类进行。...
总结来说,这个"android数据库操作实例"涵盖了Android应用中使用SQLite数据库的基础知识,包括创建数据库、定义表结构、插入、查询、更新和删除数据等操作。通过学习这个实例,开发者可以更好地理解如何在Android...
在Android平台上进行MySQL数据库操作是一项常见的任务,尤其是在开发需要与远程服务器交互的移动应用时。本文将详细讲解如何在Android应用中使用Java Database Connectivity (JDBC) 连接MySQL数据库,实现数据的增删...
在Android开发中,远程数据库操作是一项重要技能,它允许应用程序通过网络与远程服务器进行数据交互,从而实现数据的存储和检索。本项目是基于Android Studio的,提供了实现远程数据库操作的源码,以及一个简单的...
在Android应用开发中,SQLite是一个常用的轻量级数据库,它为数据存储提供了便利。然而,随着数据安全性的日益重要,对SQLite数据库进行加密是必要的,以保护敏感信息免受未授权访问。本篇文章将深入探讨如何在...
Android SQLite 数据库操作报告 一、实验目的 Android 实验报告的主要目的是熟悉 Android 平台的文件操作、掌握 Android SQLite 数据库的设计和应用、熟悉 XML 和 JSON 文件的读取。通过本实验,用户可以掌握 ...
在Android应用开发中,数据库是存储和管理应用程序数据的关键组件。SQLite是一个轻量级的、关系型数据库,它是Android系统内置的默认数据库,非常适合用于移动设备。本教程将详细介绍如何在Android应用中查询SQLite...
本篇文章将深入探讨如何在Android中创建一个简单的数据库程序,包括增加和删除数据的操作。 首先,Android系统支持SQLite数据库,这是一个轻量级的关系型数据库,非常适合移动设备使用。SQLite数据库无需单独的...
在Android开发中,SQLite是一个内置的轻量级数据库系统,用于存储应用程序的结构化数据。本教程将详述如何在Android应用中读取SQLite数据库的数据并利用ListView进行展示。 首先,我们需要创建SQLite数据库。在...