`
pandong8183
  • 浏览: 56196 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android 纯代码化编码4_访问本地数据库帮助类

阅读更多

安卓自己就提供一个本地数据库供用户使用,它的具体放置的位置我记不住了,大家百度一下就知道,我们实际开发的过程中肯定是要进行一定程度的封装的,方便操作,下面就是我自己封装的一个帮助类,希望对大家有所帮助,方法名仿照的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高级编程》的源代码 对应的书籍资料见: Android高级编程 基本信息 原书名: Professional Android Application Development 原出版社: Wrox 作者: (英)Reto Meier 译者: 王鹏杰 霍建同 出版社...

    传智播客的android开发源代码

    40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42_服务的生命周期.avi 43_音乐播放器.avi 所在项目:...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    • 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。 • 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 4 • ...

    8天快速掌握Android教程源码

    视频名称 源码 ----------------------...复杂UI界面设计、GPS与GoogleMap、自定义View、Ubuntu Linux下使用C语言面向底层开发、通过JNI进行底层组件调用、图形与OpenGl ES、界面特效、下载修改及编绎Android框架代码。

    精通ANDROID 3(中文版)1/2

    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...

    精通Android 3 (中文版)2/2

    第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上百实例源码以及开源项目源代码

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    source.zip

    视频名称 源码 ----------------------...复杂UI界面设计、GPS与GoogleMap、自定义View、Ubuntu Linux下使用C语言面向底层开发、通过JNI进行底层组件调用、图形与OpenGl ES、界面特效、下载修改及编绎Android框架代码。

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    移动应用开发技术实验指导书

    资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 活动管理器( ...

    java开源包4

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包8

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包10

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包1

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包11

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包2

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包3

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

    java开源包6

    WARTS是一个纯Java数据库工具,可以执行字符编码识别的数据同步。开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的...

Global site tag (gtag.js) - Google Analytics