您的位置:首页 > 移动开发 > Android开发

Android SQLite操作

2015-12-19 22:15 405 查看

SQLite操作

SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

public class DBHelper extends SQLiteOpenHelper {

private static final String DB_NAME="mydata.db";//数据库名称
public static final String DB_TABLE="myBean";//表名称
private static final int version=1;//数据库版本,可以考虑获取app版本
private static DBHelper mInstance; //这里考虑使用单例

/**
* 构造方法,一般是传递一个要创建的数据库名称及参数
* @param context
* @param name
* @param factory
* @param version
*/
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

/**
* 自己封装一个获得数据库的单例调用方法
* @param context
* @return
*/
public synchronized static DBHelper getInstance(Context context){
if(mInstance==null){
mInstance=new DBHelper(context,DB_NAME,null,version);
}
return mInstance;
}

/**
* 创建数据库时调用
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql="CREATE TABLE if not exists  "+DB_TABLE+"("+
"id"+" INTEGER PRIMARY KEY,"+
"time"+" VARCHAR(50),"+
"content"+" TEXT "+")";
db.execSQL(sql);
}

/**
*版本更新时调用
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion>newVersion) return;
db.execSQL("DROP TABLE IF EXISTS "+DB_TABLE);
onCreate(db);
}

/**
* 添加一行数据到表中,并返回id值
* @param tableName
* @param bean
* @return
*/
public int addBeanToDatabase(String tableName, Bean bean){
ContentValues contentValues=new ContentValues();
contentValues.put("time",bean.getTime());
contentValues.put("content",bean.getContent());

SQLiteDatabase db=this.getWritableDatabase();
int id=(int)db.insert(DB_TABLE,null,contentValues);

return id;
}

/**
* 根据时间获得一个通用Bean对象
*
* @param tableName 表名
* @param time      Bean的time属性
* @return 表中一个符合time属性的bean
*/
public Bean getOneBean(String tableName, String time) {
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(tableName, new String[]{
"id",
"time",
"content"
}, "time" + "=?", new String[]{
time}, null, null, null);
if (cursor.moveToFirst()) {
Bean bean = new Bean();
bean.setTime(cursor.getString(cursor.getColumnIndex("time")));
bean.setContent(cursor.getString(cursor.getColumnIndex("content")));
cursor.close();
return bean;
} else {
cursor.close();
return null;
}
}

/**
* 根据id获得一个通用Bean对象
*
* @param tableName 表名
* @param id        Bean的id属性
* @return 表中一个符合id属性的bean
*/
public Bean getOneBean(String tableName, int id) {
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery("SELECT * FROM " + tableName + " WHERE " + "id" + "=" + "'" + id + "'", null);
if (cursor.moveToFirst()) {
Bean bean = new Bean();
bean.setTime(cursor.getString(1));
bean.setContent(cursor.getString(2));
cursor.close();
return bean;
} else {
cursor.close();
return null;
}
}

/**
* 获取一张表中的所有通用Bean对象
*
* @param tableName 表名
* @return 通用Bean的集合
*/
public List<Bean> getAllBeans(String tableName) {
List<Bean> list = new ArrayList<>();

String querySQL = "SELECT * FROM " + tableName;

SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(querySQL, null);
if (cursor.moveToFirst()) {
do {
Bean bean = new Bean();
bean.setTime(cursor.getString(1));
bean.setContent(cursor.getString(2));
list.add(bean);
} while (cursor.moveToNext());
}
cursor.close();
return list;
}

/**
* 删除表中时间和内容与deleteBean一致的属性
*
* @param tableName  表名
* @param deleteBean 要删除的数据
*/
public void deleteBean(String tableName, Bean deleteBean) {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE FROM " + tableName + " WHERE " +"time"+ "=" + "'" + deleteBean.getTime()
+ "'" + " AND " +"content"+ "='" + deleteBean.getContent() + "'");
}

/**
* 删除表中对应id的数据
*
* @param tableName 表名
* @param id        id
*/
public void deleteBean(String tableName, int id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(tableName, "id"+ " = ?", new String[]{String.valueOf(id)});
}

/**
* 更新一条与oldBean的时间一致的数据
*
* @param tableName 表名
* @param oldBean   旧数据
* @param newBean   新数据
* @return 数据的id
*/
public int updateBean(String tableName, Bean oldBean, Bean newBean) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("time", newBean.getTime());
contentValues.put("content", newBean.getContent());

int newID = db.update(tableName, contentValues, "time" + "=?", new String[]{oldBean.getTime()});
return newID;
}

/**
* 更新对应id的数据
*
* @param tableName 表名
* @param id        id
* @param newBean   新数据
* @return 数据的id
*/
public int updateBean(String tableName, int id,Bean newBean) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("time", newBean.getTime());
contentValues.put("content", newBean.getContent());

int newID = db.update(tableName, contentValues, "id" + "=?", new String[]{String.valueOf(id)});
return newID;
}


(int) delete(String table,String whereClause,String[] whereArgs) 删除数据行的便捷方法

(long) insert(String table,String nullColumnHack,ContentValues values) 添加数据行的便捷方法

(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法

(void) execSQL(String sql) 执行一个SQL语句,可以是一个select或其他的sql语句

(void) close() 关闭数据库

(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查询指定的数据表返回一个带游标的数据集

(Cursor) rawQuery(String sql, String[] selectionArgs) 运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)

通过query实现查询的

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

各参数说明:

table:表名称

colums:列名称数组

selection:条件子句,相当于where

selectionArgs:条件语句的参数数组

groupBy:分组

having:分组条件

orderBy:排序类

limit:分页查询的限制

Cursor:返回值,相当于结果集ResultSet

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQLite 数据库 android