设为首页 收藏本站
查看: 1142|回复: 0

[经验分享] BlackBerry操作sqlite的API封装

[复制链接]

尚未签到

发表于 2016-11-30 11:00:26 | 显示全部楼层 |阅读模式
  BlackBerry操作sqlite的API封装
  BlackBerry提供了对SQLite的API,但是直接拿来使用还是比较麻烦的,这里自己写了一个小的API封装。
  1. 核心工具类DBUtil,提供对数据库表的操作。
  package db;import java.util.Vector;import net.rim.device.api.database.Cursor;import net.rim.device.api.database.Database;import net.rim.device.api.database.DatabaseException;import net.rim.device.api.database.DatabaseFactory;import net.rim.device.api.database.DatabaseIOException;import net.rim.device.api.database.Row;import net.rim.device.api.database.Statement;import net.rim.device.api.io.URI;public class DBUtil {public static DBUtil util = new DBUtil();private DBUtil() {}public static DBUtil getInstance() {return util;}public Vector query(String sql, RowMapper rowMapper) throws DBException {return this.query(sql, new Object[0], rowMapper);}public Vector query(String sql, Object[] params, RowMapper rowMapper) throws DBException {Vector list = new Vector();Database db = this.getDatabase();Statement stmt = null;Cursor cursor = null;try {stmt = db.createStatement(sql);stmt.prepare();for (int i = 0; i < params.length; i++) {stmt.bind(i + 1, params.toString());}cursor = stmt.getCursor();while (cursor.next()) {Row row = cursor.getRow();list.addElement(rowMapper.mapRow(row));}stmt.execute();} catch (Exception ex) {throw new DBException(ex.getMessage());} finally {this.close(cursor);this.close(stmt);this.close(db);}return list;}public Vector query(String sql, ParameterBinder binder, RowMapper rowMapper) throws DBException {Vector list = new Vector();Database db = this.getDatabase();Statement stmt = null;Cursor cursor = null;try {stmt = db.createStatement(sql);stmt.prepare();binder.bind(stmt);cursor = stmt.getCursor();while (cursor.next()) {Row row = cursor.getRow();list.addElement(rowMapper.mapRow(row));}stmt.execute();} catch (Exception ex) {throw new DBException(ex.getMessage());} finally {this.close(cursor);this.close(stmt);this.close(db);}return list;}public void update(String sql) throws DBException {this.update(sql, new Object[0]);}public void update(String sql, Object[] params) throws DBException {Database db = this.getDatabase();Statement stmt = null;try {db.beginTransaction();stmt = db.createStatement(sql);stmt.prepare();for (int i = 0; i < params.length; i++) {stmt.bind(i + 1, params.toString());}stmt.execute();db.commitTransaction();} catch (Exception ex) {throw new DBException(ex.getMessage());} finally {this.close(stmt);this.close(db);}}public void update(String sql, ParameterBinder binder) throws DBException {Database db = this.getDatabase();Statement stmt = null;try {db.beginTransaction();stmt = db.createStatement(sql);stmt.prepare();binder.bind(stmt);stmt.execute();db.commitTransaction();} catch (Exception ex) {throw new DBException(ex.getMessage());} finally {this.close(stmt);this.close(db);}}private Database getDatabase() throws DBException {try {URI myURI = URI.create("file:///SDCard/Databases/test.db");Database db = DatabaseFactory.openOrCreate(myURI);return db;} catch (Exception ex) {throw new DBException(ex.getMessage());}}private void close(Database db) {try {if (db != null) {db.close();}} catch (DatabaseIOException ex) {ex.printStackTrace();}}private void close(Statement stmt) {try {if (stmt != null) {stmt.close();}} catch (DatabaseException ex) {ex.printStackTrace();}}private void close(Cursor cursor) {try {if (cursor != null) {cursor.close();}} catch (DatabaseException ex) {ex.printStackTrace();}}}
  2. 数据库操作异常类DBException,这里由于BB的一下限制,所以个人感觉DBException继承RuntimeException类更好一点,而不是Exception类。
  package db;public class DBException extends RuntimeException {private static final long serialVersionUID = 1L;public DBException() {super();}public DBException(String message) {super(message);}}
  3. ParameterBinder接口,用来做参数化执行sql语句是传递参数使用。
  package db;import net.rim.device.api.database.Statement;public interface ParameterBinder {void bind(Statement stmt) throws Exception;}
  4. RowMapper接口,用来提供对于每一行记录的转换。
  package db;import net.rim.device.api.database.Row;public interface RowMapper {Object mapRow(Row row) throws Exception;}
  5. Test类
  package db;import net.rim.device.api.database.Row;import net.rim.device.api.database.Statement;public class Test {public static void test() throws Exception {DBUtil.getInstance().update("CREATE TABLE IF NOT EXISTS test ('id' Long,'col1' Text, 'col2' Text, 'col3' Text)");DBUtil.getInstance().update("insert into test(id, col1, col2, col3) values(?, ?, ?, ?)", new Object[]{Long.toString(System.currentTimeMillis()), "a", "b", "c"});DBUtil.getInstance().update("insert into test(id, col1, col2, col3) values(?, ?, ?, ?)", new ParameterBinder() {public void bind(Statement stmt) throws Exception {stmt.bind(1, 1);stmt.bind(2, "111");stmt.bind(3, "222");stmt.bind(4, "333");}});DBUtil.getInstance().query("select * from test", new RowMapper() {public Object mapRow(Row row) throws Exception {System.out.println(row.getObject(0));return row.getObject(0);}});DBUtil.getInstance().query("select * from test where id=?", new ParameterBinder() {public void bind(Statement stmt) throws Exception {stmt.bind(1, 1);}},new RowMapper() {public Object mapRow(Row row) throws Exception {System.out.println(row.getObject(0));return row.getObject(0);}});}}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307656-1-1.html 上篇帖子: Android 深入研究SQLite实例(一) 之 业务类 sqlite版本管理类 下篇帖子: NHibernate + SQLite + MVC 开发记录 四
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表