安卓自己就提供一个本地数据库供用户使用,它的具体放置的位置我记不住了,大家百度一下就知道,我们实际开发的过程中肯定是要进行一定程度的封装的,方便操作,下面就是我自己封装的一个帮助类,希望对大家有所帮助,方法名仿照的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使用SQLite作为其内置的关系型数据库,SQLite是一个轻量级、事务性的数据库引擎,适合移动设备上的本地数据...
4. **数据模型(Model)**:如`MenuItem`类,封装了菜品的属性,如名称、价格和图片链接。 5. **网络请求(Network)**:使用`Retrofit`或`Volley`等网络库,与服务器进行交互,获取菜品数据,提交订单等。通常会有...
- **性能**:由于JDBC在Android上可能不如本地数据库(如SQLite)高效,频繁的远程数据库访问可能导致性能问题。考虑使用缓存、批量操作或者使用RESTful API等方式优化性能。 - **异步操作**:考虑到Android的主线...
源代码中可能会包含一个SQLiteOpenHelper子类,用于创建和操作数据库,以及相应的DAO(数据访问对象)类,用于插入、查询和删除播放记录。理解这些内容对于实现用户个性化体验至关重要。 再者,用户交互是播放器的...
- **Android数据库操作**:SQLite是Android内置的轻量级数据库,可以用于持久化数据。 - **Android Activity操作**:Activity是Android应用的基本组件,负责用户界面的展示和交互。 - **Android文件操作**:Android...
开发者可以通过SQLiteOpenHelper类来创建、升级和访问数据库。数据库中的表可能包括字段如`phone_number`(手机号码)、`province`(省份)、`city`(城市)、`zip_code`(邮政编码)等,便于查询和匹配手机号码的...
在Android开发中,有时我们需要实现应用与服务器...在提供的压缩包文件"JDBC4MYSQL-master"中,可能包含了更具体的代码示例和教程,帮助开发者理解这一过程。记得在实际项目中遵循最佳实践,确保应用的性能和安全性。
Android提供了丰富的文件系统访问API,开发者可以使用`java.io`或`java.nio`包中的类来读取本地文件。例如,我们可以使用`FileInputStream`和`BufferedReader`来逐行读取TXT文件内容。同时,为了支持不同的编码格式...
SQLite是Android系统内置的关系型数据库,用于本地数据存储。在这个财务管理系统中,SQLite被用来记录用户的收支信息,如日期、金额、类别等。通过创建表结构,设置字段,可以实现数据的增删查改操作。源代码中的...
当离线时,可以先操作本地数据库,然后在网络恢复时同步到远程MySQL数据库。 总之,Android与MySQL的交互通常涉及构建Web服务作为中介,通过HTTP请求执行CRUD操作。使用Retrofit等网络库可以简化这个过程,同时注意...
【标题】:“聊天android开源代码nety”是一个针对Android平台的开源聊天应用项目,它主要实现了客户端与服务器端的通信功能,以便构建一个简单的聊天客服系统。该项目并未包含服务端的源码,但提供了Android客户端...
3. **SQLite数据库**:Android内置了SQLite数据库,用于本地数据存储。在这个项目中,开发者会创建一个SQLite数据库,定义数据表结构,并实现CRUD(Create、Read、Update、Delete)操作。例如,创建一个`Student`表...
15. **代码风格与规范**:遵循Google的Android编码规范,使用代码格式化工具(如Android Lint)检查和修复代码风格问题,提升代码可读性。 通过深入研究这个源码,开发者可以学习到Android应用开发的各个方面,包括...
该资源是一个包含基于Android开发的毕业设计选题系统的完整源码和数据库,旨在帮助学生或开发者了解如何构建类似的移动端应用。下面将详细讲解这个系统的关键技术、设计思路以及可能涉及的知识点。 首先,"毕业设计...
【Android本地MP3音乐播放器】是一款专为Android设备设计的应用程序,旨在提供方便快捷的本地音乐播放功能。用户可以通过该应用轻松地管理和播放存储在手机或外部存储卡中的MP3音频文件。以下是对该应用及其相关技术...
5. **数据持久化**:为了保存ATM的运行状态或交易记录,开发者可能需要用到SQLite数据库,这是Android内置的轻量级关系型数据库,方便本地数据存储。 6. **网络通信**:ATM清机维护可能涉及与服务器的交互,如同步...
该资料是《Android高级编程》的源代码 对应的书籍资料见: Android高级编程 基本信息 原书名: Professional Android Application Development 原出版社: Wrox 作者: (英)Reto Meier 译者: 王鹏杰 霍建同 出版社...
6. **Android权限管理**:在Android系统中,访问本地存储或网络需要获取相应的权限。开发者需要在AndroidManifest.xml文件中声明所需的权限。 7. **安全最佳实践**:考虑到密码管理器的敏感性质,开发者需要遵循...
【Android简易通讯录程序】是一个基于Android平台的简单应用程序,旨在帮助用户管理和存储联系人信息。这个项目展示了如何在Android环境中构建一个基本的通讯录应用,涵盖了Android开发的关键概念和技术。 1. **...