`
hemowolf
  • 浏览: 154113 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一个android sqlite CRUD代码生成小工具

阅读更多

把之前的文章合并到这里,添加bulk批量操作函数.

android sqlite也无非是CRUD,所以通常是Ctrl+C、Ctrl+V,不过拷贝的代码容易出错浪费不少苦逼的时间。android sqlite的ORM的开源项目现在也有不少,不过对于一个嵌入式程序除了性能也需要考虑包的大小,所以ORM在嵌入式来说起码现在还不适合时机。

  这个小工具功能很简单,不添加任何外部引用,使用方式直接运行按提示做即可^_^。

  具体功能:通过输入create table语句生成表CRUD类、实体类(可选)。
  由于sqlite解析器没有解析check约束,所以create table语句也不支持check约束。

    sqlite和java类型映射关系(需要注意的是sqlite实际只支持5中数据类型,详情见链接)
sqlite
java
int、integer
int
short、byte、boolean、bool
short
long、number
long
text、varchar、char
、nvarchar 、string
String
float
float
real、double
double
blob
byte[]
 

 现在控制带输入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

 

分享到:
评论

相关推荐

    android sqlite可视化工具

    10. **代码生成**:自动生成Java或Kotlin代码,用于Android应用中对数据库的CRUD操作,加速开发进程。 在提供的压缩文件“SQLiteExpert_3.4.34.2256_XiaZaiBa.exe”中,我们可以看到一个名为SQLite Expert的SQLite...

    Android 对sqlite的封装,实现CRUD

    大家好,个人觉得用Sqlite数据库时,经常需要进行机械性的CRUD操作,故对其进行了一下封装,希望能起到抛砖引玉的作用。 目的:封装共有的CRUD 下面简单的说一下使用步骤,如果觉得多余,可以无视。 1. 实现自己...

    JAVA SQLite 自动生成实体类 源码

    本项目提供的"JAVA SQLite 自动生成实体类 源码"是一个实用工具,它能够帮助开发者自动生成与SQLite数据库表结构对应的Java实体类,从而简化数据操作的代码编写工作。 首先,我们来理解这个工具的工作原理。当...

    android 数据库操作代码生成器(version 0.1)-32位

    "android 数据库操作代码生成器(version 0.1)-32位" 是一个专为提高开发效率而设计的工具,它能够自动生成数据库操作的相关代码,帮助开发者免去手动编写基础代码的繁琐过程。 首先,我们要理解Android中的SQLite...

    Android+SQLite实现用户注册登录代码

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的数据库系统,适用于本地数据存储。本项目“Android+SQLite实现用户注册登录代码”旨在教你如何在Android Studio中利用SQLite数据库来创建用户...

    android中使用SQLite进行CRUD操作的实例

    这篇博客文章将通过一个名为"DBDemo"的实例,深入讲解如何在Android中进行SQLite的CRUD(创建、读取、更新和删除)操作。 首先,我们需要在Android项目中添加SQLite的依赖。在`build.gradle`文件的dependencies部分...

    安卓SQLite数据库相关-Android轻量级sqliteorm框架.zip

    在"Android轻量级sqlite orm框架.zip"中,可能包含了一个或多个ORM库的示例代码,如ActiveAndroid、GreenDao、SugarORM、ORMLite等。这些框架都有各自的优缺点,例如: 1. **ActiveAndroid**:提供了一套简单的API...

    Android Sqlite 封装类源码

    在Android开发中,SQLite是一个非常重要的组件,用于存储和管理应用程序的数据。为了简化SQLite数据库的操作,开发者通常会对其进行封装,创建一个易于使用的工具类。在这个"Android Sqlite 封装类源码"中,我们可以...

    android greenADO自动生成entity代码

    总结来说,Android GreenDAO是一个强大的工具,能够帮助开发者快速构建与SQLite数据库交互的代码,通过自动化的Entity生成,降低了手动编写SQL的负担,提高了开发效率。同时,其简洁的API设计使得数据库操作变得直观...

    Android基于SQLite记事本

    在Android开发中,SQLite是一个非常重要的组成部分,尤其在构建数据驱动的应用程序时,如我们的“Android基于SQLite记事本”示例。SQLite是一个轻量级的、嵌入式的数据库,它支持SQL语言,并且能够在Android设备上...

    android 精简版的代码生存器

    "Android 精简版的代码生存器"是一个专为Android平台定制的简化版本,它可能包含了基本的代码生成功能,适合那些希望快速搭建应用基础框架的开发者。 首先,我们来详细了解一下代码生存器的基本概念。代码生存器的...

    Sqlite工具greenDao

    4. **代码生成**: greenDAO提供代码生成工具,自动生成DAO类和实体类,减轻开发负担。 5. **事务支持**: 支持数据库事务,确保数据的一致性和完整性。 6. **内存缓存**: 可以使用内存中的对象缓存,提高数据访问速度...

    android-sqlite-mysql-sync-example-master_SQLlite_Keygent_android

    Keygent可能是指一个生成安全密钥的工具或组件,这在Android应用中用于加密和保护敏感数据,比如用户的登录凭据或数据库连接信息。 在这个项目中,你可能会学习到以下知识点: 1. **SQLite数据库基础**:了解...

    Android高级应用源码-Android轻量级sqlite orm框架.zip

    这个压缩包"Android高级应用源码-Android轻量级sqlite orm框架.zip"很可能包含了一个适用于Android的轻量级SQLite ORM框架的示例代码,帮助开发者理解如何在Android应用中高效地使用SQLite。 首先,我们来深入理解...

    Android应用源码之Android轻量级sqlite orm框架.zip

    在Android开发中,SQLite是一个非常重要的组件,它是一个轻型的数据库,被广泛用于存储应用程序的数据。ORM(Object-Relational Mapping)框架则为开发者提供了一种方便的方式来操作数据库,无需直接编写SQL语句,...

    android SQLite 执久化框架,类似于hibernate

    在Android开发中,SQLite是一个内置的轻量级数据库系统,用于存储结构化的数据。它对于移动设备来说非常适用,因为它不需要额外的服务器进程,并且在内存占用和性能方面都有很好的表现。然而,直接操作SQLite数据库...

    一个用于Android开发的对象关系映射工具-GreenDao.rar

    在这个名为"一个用于Android开发的对象关系映射工具-GreenDao.rar"的压缩包中,包含了与使用GreenDao相关的资源和代码示例,供开发者参考和学习。 GreenDao的主要特点包括: 1. **高效性能**:GreenDao设计的目标...

    AndroidInject增加sqlite3数据库映射注解(ORM)

    AndroidInject库正是这样一个帮助开发者实现ORM的工具,它允许开发者通过注解来实现SQLite3数据库的映射。 首先,让我们深入理解AndroidInject的ORM机制。ORM的核心是将Java对象与数据库表进行映射,通过注解,我们...

    Android操作SQLite数据库项目.zip

    在Android应用开发中,SQLite是一个不可或缺的部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。本项目“Android操作SQLite数据库项目”旨在帮助开发者掌握如何在...

Global site tag (gtag.js) - Google Analytics