安卓自己就提供一个本地数据库供用户使用,它的具体放置的位置我记不住了,大家百度一下就知道,我们实际开发的过程中肯定是要进行一定程度的封装的,方便操作,下面就是我自己封装的一个帮助类,希望对大家有所帮助,方法名仿照的hibernate
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
/**
* 安卓本地数据库访问对象
*
* @author pandong
* @date 2012-7-12 上午10:15:20
*/
public class SqliteDataBase extends SQLiteOpenHelper {
private static final int VERSION = 1;
// 在SQLiteOepnHelper的子类当中,必须有该构造函数
public SqliteDataBase(Context context, String name, CursorFactory factory, int version) {
// 必须通过super调用父类当中的构造函数
super(context, name, factory, version);
}
public SqliteDataBase(Context context, String name) {
this(context, name, VERSION);
}
public SqliteDataBase(Context context, String name, int version) {
this(context, name, null, version);
}
/**
* 执行语句并获取首行首列
*/
public int queryForInt(String sql) {
SQLiteDatabase db = getReadableDatabase();
String result = null;
try {
SQLiteStatement stmt = db.compileStatement(sql);
result = stmt.simpleQueryForLong() + "";
} catch (Exception e) {
e.printStackTrace();
} finally {
close(db, null, null);
}
return Integer.parseInt(result);
}
/**
* 执行语句返回一组元素
*/
public List<Map> queryForList(String sql) {
List<Map> resultList = new ArrayList<Map>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = null;
try {
cursor = db.rawQuery(sql, null);
while (cursor.moveToNext()) {
int columnCount = cursor.getColumnCount();
Map columnMap = new HashMap();
for (int i = 0; i < columnCount; i++) {
String columnName = cursor.getColumnName(i);
String columnValue = cursor.getString(i);
columnMap.put(columnName, columnValue);
}
resultList.add(columnMap);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(db, null, cursor);
}
return resultList;
}
/**
* 执行语句并返回一个元素
*/
public Map queryForMap(String sql) {
Map columnMap = new HashMap();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = null;
try {
cursor = db.rawQuery(sql, null);
if (cursor.moveToNext()) {
int columnCount = cursor.getColumnCount();
for (int i = 0; i < columnCount; i++) {
String columnName = cursor.getColumnName(i);
String columnValue = cursor.getString(i);
columnMap.put(columnName, columnValue);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(db, null, cursor);
}
return columnMap;
}
/**
* 执行一条insert语句
*/
public int insert(String sql) {
return executeUpdate(sql);
}
/**
* 事务方式执行一组insert语句
*/
public int insert(String[] sql) {
return executeUpdate(sql);
}
/**
* 执行一条预格式语句,预格式语句:insert t_test values(?,?,?)
*/
public int insert(String psql, String[] data) {
return executeUpdate(psql, data, "update");
}
/**
* 执行一条更新语句update/delete
*/
public int update(String sql) {
return executeUpdate(sql);
}
/**
* 事务执行一组更新语句update/delete
*/
public int update(String[] sql) {
return executeUpdate(sql);
}
/**
* 执行一条预格式语句,预格式语句:update t_test set t1 = ?
*/
public int update(String psql, String[] data) {
return executeUpdate(psql, data, "update");
}
/**
* 统一的执行语句的方法
*
* @param sql
* @return
*/
private int executeUpdate(String sql) {
SQLiteDatabase db = getWritableDatabase();
try {
db.execSQL(sql);
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
close(db, null, null);
}
return 1;
}
/**
* 统一的执行一组语句的方法
*
* @param sql
* @return
*/
private int executeUpdate(String[] sql) {
SQLiteDatabase db = getWritableDatabase();
try {
db.beginTransaction();
for (String curSql : sql) {
db.execSQL(curSql);
}
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
db.endTransaction();
close(db, null, null);
}
return 1;
}
/**
* 统一的执行预格式语句的方法
*
* @param psql
* @param data
* @param type
* @return
*/
private int executeUpdate(String psql, String[] data, String type) {
SQLiteDatabase db = getWritableDatabase();
SQLiteStatement stmt = null;
String reuslt = "";
try {
stmt = db.compileStatement(psql);
db.beginTransaction();
for (int i = 1; i <= data.length; i++) {
stmt.bindString(i, data[i - 1]);
}
if ("insert".equals(type)) {
reuslt = stmt.executeInsert() + "";
} else {
reuslt = stmt.executeUpdateDelete() + "";
}
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
db.endTransaction();
close(db, stmt, null);
}
return Integer.parseInt(reuslt);
}
public void onCreate(SQLiteDatabase db) {
// 初始化基本表
db.execSQL("create table t_sys_user(userId varchar(10) PRIMARY KEY,userName varchar(10), userPass varchar(10))");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 什么也不做
}
/**
* 释放数据库资源的方法
*
* @param db
* @param stmt
* @param cursor
*/
private void close(SQLiteDatabase db, SQLiteStatement stmt, Cursor cursor) {
if (cursor != null) {
cursor.close();
}
if (stmt != null) {
stmt.close();
}
if (db != null) {
db.close();
}
}
}
分享到:
相关推荐
该资料是《Android高级编程》的源代码 对应的书籍资料见: Android高级编程 基本信息 原书名: Professional Android Application Development 原出版社: Wrox 作者: (英)Reto Meier 译者: 王鹏杰 霍建同 出版社...
40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42_服务的生命周期.avi 43_音乐播放器.avi 所在项目:...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
• 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。 • 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 4 • ...
视频名称 源码 ----------------------...复杂UI界面设计、GPS与GoogleMap、自定义View、Ubuntu Linux下使用C语言面向底层开发、通过JNI进行底层组件调用、图形与OpenGl ES、界面特效、下载修改及编绎Android框架代码。
1.6 利用Android源代码 1.7 本书的示例项目 1.8 小结 第2章 设置开发环境 2.1 设置环境 2.1.1 下载JDK 6 2.1.2 下载Eclipse 3.6 2.1.3 下载Android SDK 2.1.4 命令行窗口 2.1.5 安装ADT...
第1章 Android计算平台简介 1.1 面向新PC的全新平台 1.2 Android的历史 1.3 Dalvik VM剖析 1.4 理解Android软件栈 1.5 使用Android SDK开发最终用户应用程序 1.5.1 Android模拟器 1.5.2 ...
Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...
视频名称 源码 ----------------------...复杂UI界面设计、GPS与GoogleMap、自定义View、Ubuntu Linux下使用C语言面向底层开发、通过JNI进行底层组件调用、图形与OpenGl ES、界面特效、下载修改及编绎Android框架代码。
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 活动管理器( ...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...
WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...