一個android sqlite CRUD代碼生成小工具

把以前的文章合併到這裏,添加bulk批量操做函數.html

源碼已開源sqliteGenCRUDjava

android sqlite也無非是CRUD,因此一般是Ctrl+C、Ctrl+V,不過拷貝的代碼容易出錯浪費很多苦逼的時間。android sqlite的ORM的開源項目如今也有很多,不過對於一個嵌入式程序除了性能也須要考慮包的大小,因此ORM在嵌入式來講起碼如今還不適合時機。android

  這個小工具功能很簡單,不添加任何外部引用,使用方式直接運行按提示作便可^_^。git

  具體功能:經過輸入create table語句生成表CRUD類、實體類(可選)。
  因爲sqlite解析器沒有解析check約束,因此create table語句也不支持check約束。github

    sqlite和java類型映射關係(須要注意的是sqlite   實際   只支持5中數據類型,詳情見   連接   )  sql

sqliteapp

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

 

 工具下載

相關文章
相關標籤/搜索