package com.wisedu.scc.love.sqlite;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import org.androidannotations.annotations.EBean;
import java.util.ArrayList;
import java.util.List;
/**
* Created by JZ on 2015/3/9.
*/
@EBean
public class SqliteHelper {
/*常量*/
private static final String DATABASE_NAME = "LOVE";
private static final int DATABASE_VERSION = 1;
private DatabaseHelper mOpenHelper;
public SqliteHelper(Context c){
mOpenHelper = new DatabaseHelper(c);
}
/**
* 插入一条数据
* @param tableName
* @return
*/
public boolean insert(String tableName, Object obj) {
try {
// 先处理表
dealTableFirst(tableName);
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
ContentValues values = SqlBuilder.geneValues(tableName, obj);
db.insert(tableName, null, values);
db.close();
Log.i("插入语句:", tableName);
return true;
} catch (Exception e) {
Log.i("插入语句:", tableName);
return false;
}
}
/**
* 修改一条数据
* @param tableName
* @param whereClause
* @param whereArgs
* @return
*/
public boolean update(String tableName, Object obj, String whereClause,
String[] whereArgs) {
try {
// 先处理表
dealTableFirst(tableName);
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
ContentValues values = SqlBuilder.geneValues(tableName, obj);
db.update(tableName, values, whereClause, whereArgs);
db.close();
Log.i("修改语句:", tableName);
return true;
} catch (Exception e) {
Log.i("修改语句:", tableName);
return false;
}
}
/**
* 删除数据
* @param tableName
* @param whereClause
* @param whereArgs
* @return
*/
public boolean delete(String tableName, String whereClause, String[] whereArgs) {
try {
// 先处理表
dealTableFirst(tableName);
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.delete(tableName, whereClause, whereArgs);
Log.i("删除语句:", tableName);
db.close();
return true;
} catch (Exception e) {
Log.i("删除语句:", tableName);
return false;
}
}
/**
* 查找数据
* @return
*/
public <T> List<T> get(String tableName, String[] columns, String whereClause,
String[] whereArgs, String groupBy, String having,
String orderBy, String limit) {
// 先处理表
dealTableFirst(tableName);
// 取出数据
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
Cursor cursor = db.query(tableName, columns, whereClause,
whereArgs, groupBy, having, orderBy, limit);
try {
List<T> list = new ArrayList<T>();
while (cursor.moveToNext()) {
T t = SqlBuilder.cursor2Entity(cursor, tableName);
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null)
cursor.close();
if (db != null)
db.close();
}
return null;
}
/**
* 检查存在
* @param tableName
* @param whereClause
* @param whereArgs
* @return
*/
public boolean check(String tableName, String whereClause, String[] whereArgs) {
// 先处理表
dealTableFirst(tableName);
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor cursor = db.query(tableName, null, whereClause, whereArgs, null, null, null);
try {
return (null!=cursor&&cursor.getCount()>0);
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (cursor != null)
cursor.close();
if(null!=db)
db.close();
}
}
/**
* 删除一张表
* @return
*/
public boolean dropTable(String tableName) {
try {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "drop table " + tableName;
db.execSQL(sql);
db.close();
return true;
} catch (Exception e) {
return false;
}
}
/**
* 重新创建一张表
* @return
*/
public boolean reCreateTable(String tableName) {
try {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String dropSql = "drop table if exists "+tableName;
String createSql = SqlBuilder.geneSql(tableName);
db.execSQL(dropSql);
db.execSQL(createSql);
db.close();
return true;
} catch (Exception e) {
return false;
}
}
/**
* 检查表是否存在,不存在则创建
*/
private void dealTableFirst(String table){
if(null!=table) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
try {
String sql = "select count(0) from sqlite_master"
+ " where type ='table' and name ='" + table.trim() + "' ";
Cursor cursor = db.rawQuery(sql, null);
if (null == cursor || !(cursor.moveToNext()) || cursor.getInt(0)<=0) {
reCreateTable(table);
} else {
cursor.close();
}
} catch (Exception e){
e.printStackTrace();
} finally {
if(null!=db)
db.close();
}
}
}
/**
* 内部静态类
* SQLite使用帮助
*/
public static class DatabaseHelper extends SQLiteOpenHelper{
DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
/*数据库第一次创建时调用,可以在此建表及做一些初始化*/
@Override
public void onCreate(SQLiteDatabase db) {
// 初始化所有表
for(String sql : SqlBuilder.allCreateSql()){
db.execSQL(sql);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO
}
}
}