把之前的文章合并到这里,添加bulk批量操作函数.
android sqlite也无非是CRUD,所以通常是Ctrl+C、Ctrl+V,不过拷贝的代码容易出错浪费不少苦逼的时间。android sqlite的ORM的开源项目现在也有不少,不过对于一个嵌入式程序除了性能也需要考虑包的大小,所以ORM在嵌入式来说起码现在还不适合时机。
这个小工具功能很简单,不添加任何外部引用,使用方式直接运行按提示做即可^_^。
具体功能:通过输入create table语句生成表CRUD类、实体类(可选)。
由于sqlite解析器没有解析check约束,所以create table语句也不支持check约束。
sqlite javaint、integer int short、byte、boolean、bool short long、number long text、varchar、char
、nvarchar 、string String float float real、double double blobbyte[]
现在控制带输入sqlite create table语句就可以了
生成的CRUD代码大概是这样的
import java.util.List; import java.util.ArrayList; import android.text.TextUtils; import android.database.Cursor; import android.content.ContentValues; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /* * generated by sqliteDaoGen.jar * http://obacow.iteye.com/ */ public class PersonDao{ public static final String TABLENAME = "Person"; public static final Object SYNC= new Object(); private final SQLiteOpenHelper mOpenHelper; public PersonDao(SQLiteOpenHelper openHelper){ mOpenHelper=openHelper; } // //query // public Cursor query(String whereClause, String []whereArgs){ final String sql = "SELECT " + COLUMNS.SEX + "," + COLUMNS.NAME + "," + COLUMNS.AGE + "," + COLUMNS.ID + " FROM " + (TextUtils.isEmpty(whereClause)? TABLENAME : TABLENAME+" WHERE "+whereClause); return mOpenHelper.getReadableDatabase().rawQuery(sql, whereArgs); } public List<Person> queryToList(String whereClause, String []whereArgs){ Cursor cursor=null; try{ synchronized(SYNC){ if ( (cursor = query(whereClause, whereArgs) )==null || cursor.getCount()<1)return null; final List<Person> list = new ArrayList<Person>(cursor.getCount()); while (cursor.moveToNext()){ final Person entity=new Person(); entity.setSex( cursor.isNull(COLUMNINDEXS.SEX)? 1:cursor.getShort(COLUMNINDEXS.SEX) ); entity.setName( cursor.getString(COLUMNINDEXS.NAME) ); entity.setAge( cursor.isNull(COLUMNINDEXS.AGE)? 20:cursor.getInt(COLUMNINDEXS.AGE) ); entity.setId( cursor.getInt(COLUMNINDEXS.ID) ); list.add(entity); } cursor.close(); return list; } }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (cursor!= null) cursor.close(); } return null; } public Person queryFirst(String whereClause, String []whereArgs){ final List<Person> list=queryToList(whereClause,whereArgs); return list!=null&& list.size()>0? list.get(0):null; } public int queryTotalRows(String whereClause, String []whereArgs){ final String sql = "SELECT COUNT(*) FROM " +(TextUtils.isEmpty(whereClause)? TABLENAME : TABLENAME+" WHERE "+whereClause); Cursor cursor=null; SQLiteDatabase db=null; try{ synchronized(SYNC){ cursor=(db=mOpenHelper.getReadableDatabase()).rawQuery(sql, whereArgs); if (cursor!=null&&cursor.moveToFirst() ) return cursor.getInt(0); } }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (cursor!=null) cursor.close(); if (db!=null) db.close(); } return 0; } // //inset, update, delete // public boolean insert(Person entity){ SQLiteDatabase db=null; try{ return insert0(db=mOpenHelper.getWritableDatabase(), entity); }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (db!=null) db.close(); } return false; } public boolean update(Person entity){ SQLiteDatabase db=null; try{ return update0(db=mOpenHelper.getWritableDatabase(), entity, COLUMNS.ID+"=?", new String[]{String.valueOf(entity.getId())} ); }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (db!=null) db.close(); } return false; } public boolean delete(Person entity){ SQLiteDatabase db=null; try{ return delete0(db=mOpenHelper.getWritableDatabase(), COLUMNS.ID+"=?", new String[]{String.valueOf(entity.getId())} ); }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (db!=null) db.close(); } return false; } private static final boolean insert0(SQLiteDatabase db, Person entity){ return db.insert(TABLENAME, null, tranEntity2CV(entity, true) ) >0; } private static final boolean update0(SQLiteDatabase db, Person entity, String whereClause, String []whereArgs){ return db.update(TABLENAME, tranEntity2CV(entity, false), whereClause, whereArgs) >0; } private static final boolean delete0(SQLiteDatabase db, String whereClause, String []whereArgs){ return db.delete(TABLENAME, whereClause, whereArgs) >0; } private static final ContentValues tranEntity2CV(Person entity, boolean forInsert){ final ContentValues cv=new ContentValues(3); cv.put(COLUMNS.SEX, entity.getSex()); cv.put(COLUMNS.NAME, entity.getName()); cv.put(COLUMNS.AGE, entity.getAge()); return cv; } // //bulkInsert, bulkUpdate, bulkDelete // public boolean bulkInsert(List<Person> list){ SQLiteDatabase db=null; try{ (db=mOpenHelper.getWritableDatabase()).beginTransaction(); for (int i=0, nlen=list.size(); i<nlen; i++){ if(!insert0(db, list.get(i) ) ) return false; } db.setTransactionSuccessful(); return true; }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (db!=null){ db.endTransaction(); db.close(); } } return false; } public boolean bulkUpdate(List<Person> list){ SQLiteDatabase db=null; try{ (db=mOpenHelper.getWritableDatabase()).beginTransaction(); final String []array=new String[1]; for (int i=0, nlen=list.size(); i<nlen; i++){ Person entity=list.get(i); array[0]=String.valueOf(entity.getId()); if(!update0(db, entity, COLUMNS.ID+"=?",array) ) return false; } db.setTransactionSuccessful(); return true; }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (db!=null){ db.endTransaction(); db.close(); } } return false; } public boolean bulkDelete(List<Person> list){ SQLiteDatabase db=null; try{ final StringBuffer sb = new StringBuffer().append(COLUMNS.ID).append(" IN("); for (int i=0, nlen=list.size()-1; i<=nlen; i++){ sb.append(list.get(i).getId() ).append(i==nlen? " )" : ", "); } return delete0(db=mOpenHelper.getWritableDatabase(), sb.toString(), null); }catch(SQLException ex){ ex.printStackTrace(); }finally{ if (db!=null) db.close(); } return false; } // //stuff // public static final class COLUMNS{ public static final String SEX="[Sex]", NAME="[Name]", AGE="[Age]", ID="[_Id]"; } public static final class COLUMNINDEXS{ public static final int SEX=0, NAME=1, AGE=2, ID=3; } static final void dropTable(SQLiteDatabase db){ db.execSQL("DROP TABLE IF EXISTS " + TABLENAME + ";"); } static final void createTable(SQLiteDatabase db){ db.execSQL( "CREATE TABLE IF NOT EXISTS " + TABLENAME + "(" + COLUMNS.SEX + " INTEGER DEFAULT(1)," + COLUMNS.NAME + " TEXT(3,15) UNIQUE NOT NULL," + COLUMNS.AGE + " INTEGER DEFAULT(20)," + COLUMNS.ID + " INTEGER PRIMARY KEY AUTOINCREMENT);" ); } }//end class PersonDao
相关推荐
SQLite PHP代码生成器, 一个强大的SQLite GUI程序,用于生成高质量的SQLite PHP代码,SQLite PHP代码生成器是一个功能强大的支持SQLite数据库的PHP脚本制作工具,可以自动生成PHP脚本代码。 无论是个人学习还是研究...
SQLite CRUD
android sqlite示例代码
大家好,个人觉得用Sqlite数据库时,经常需要进行机械性的CRUD操作,故对其进行了一下封装,希望能起到抛砖引玉的作用。 目的:封装共有的CRUD 下面简单的说一下使用步骤,如果觉得多余,可以无视。 1. 实现自己...
NULL 博文链接:https://ghostfromheaven.iteye.com/blog/976680
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个...
android sqlite可视化工具,可以导入新建数据这个数据库里
DaoExampleGenerator android sqlite 自动生成实体类和Dao层
android sqlite developer sqlite开发工具 软件小 已安装 就是没次用都需要把数据库文件从模拟器中提出来 然后在新建 就是注册新数据库 不过用这挺方便的
NULL 博文链接:https://dampce032.iteye.com/blog/975399
android对sqlite的使用,源代码,提供学习
CRUD-Android-SQLite 使用SQLite在Android上进行简单的CRUD
sqlite-android一个Android SQLite支持库
Android SQLite可视化操作工具,支持SQL数据导入,编辑,查看,SQL查询
一个简单的Android SQLite ORM框架不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-SQLite-ORM-Android,因为要传到github,所以代码中的注释和doc文档都是英文的,对自己英文不...
全自动代码生成器
android操作数据库sqllite源代码,有需要的朋友可以拿走
数据库的方式,常用在存储一系列的结构复杂的数据,轻量级的数据库SQlit使用起来还是比较简单,但是总想能像hibernate似的框架可以进行下封装,实现orm并且可以实现简单的rcud。项目中只有封装包,使用过程很简单,...