使用手机本地sqlite数据库存一些类
2017-11-24 15:48
274 查看
最近工作需要,把用户检测的一些数据存到本地,因为检测完用户可能不想上传,或者上传失败,网络断了。这时候我们可以提供一个历史数据上传的功能,方便用户选择合适的数据上传,避免浪费开销,话不多说直接贴代码。
package cp.sample.com.fetalheartmonitor_demo.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import cp.sample.com.fetalheartmonitor_demo.AppContext;
public class DBServices extends SQLiteOpenHelper{
public final static int version = 1;
public final static String dbName = "MonitorData"+ AppContext.getInstance().getProperty("UsrName");//不同数据库名,登陆后显示不同列表
public DBServices(Context context){
super(context,dbName,null,version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.beginTransaction();
//创建邮件表
String create_mail_sql = "CREATE TABLE if not exists [MonitorData]"+
"(_id integer primary key autoincrement,object object)";
db.execSQL(create_mail_sql);
db.setTransactionSuccessful();
db.endTransaction();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
//增
public void insert(String table, String nullColumnHack, ContentValues values){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.insert(table, nullColumnHack, values);
db.setTransactionSuccessful();
db.endTransaction();
}
//删
public void delete(String table , String whereClause , String[] whereArgs){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.delete(table, whereClause, whereArgs);
db.setTransactionSuccessful();
db.endTransaction();
}
//改
public void update(String table, ContentValues values,
String whereClause, String[] whereArgs){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.update(table, values, whereClause, whereArgs);
db.setTransactionSuccessful();
db.endTransaction();
}
//查
public Cursor read(String sql ,String[] args){
SQLiteDatabase db = this.getReadableDatabase();
db.beginTransaction();
Cursor cursor = db.rawQuery(sql, args);
db.setTransactionSuccessful();
db.endTransaction();
return cursor;
}
}
然后在需要使用的activity或者fragment里:
这就直接存了类到数据表了。
怎么拿去类呢,下面是拿去这个类的相关代码:
DBServices db = new DBServices(this);//定义变量
db = new DBServices(this);//初始化
//拿到主键_id的列表方便查询,通过object是查不到的
public ArrayList<Integer> getAllInt() {
ArrayList<Integer> persons = new ArrayList<Integer>();
SQLiteDatabase database = db.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from MonitorData", null);
if (cursor != null) {
while (cursor.moveToNext()) {
//如果你代码中有用它从数据库中取一个整型值,需要注意:如果数据库中的这一个数据恰好是null,而null又不是int,此时并不会抛出NumberFormatException 异常,而是直接返回0!
int person =cursor.getInt(0);
persons.add(person);
}
}
Log.d("Persons-Count",Integer.toString(persons.size()));
return persons;
}
//拿去数据
public ArrayList<MonitorDataObject> getAllObject() {
ArrayList<MonitorDataObject> persons = new ArrayList<MonitorDataObject>
();
SQLiteDatabase database = db.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from MonitorData", null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.d("data-id",cursor.getString(0));
byte data[] = cursor.getBlob(cursor.getColumnIndex("object"));
ByteArrayInputStream arrayInputStream = new
ByteArrayInputStream(data);
try {
ObjectInputStream inputStream = new ObjectInputStream
(arrayInputStream);
MonitorDataObject person = (MonitorDataObject)
inputStream.readObject();
persons.add(person);
inputStream.close();
arrayInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Log.d("Persons-Count",Integer.toString(persons.size()));
return persons;
}下面举一个删除的例子:
DBServices db = new DBServices(this);
db = new DBServices(this);
//index需要删除的_id,上面代码有拿到id的列表
String[] args = {String.valueOf(index)};
db.delete("MonitorData","_id=?",args);
记录一下,方便以后查询。
package cp.sample.com.fetalheartmonitor_demo.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import cp.sample.com.fetalheartmonitor_demo.AppContext;
public class DBServices extends SQLiteOpenHelper{
public final static int version = 1;
public final static String dbName = "MonitorData"+ AppContext.getInstance().getProperty("UsrName");//不同数据库名,登陆后显示不同列表
public DBServices(Context context){
super(context,dbName,null,version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.beginTransaction();
//创建邮件表
String create_mail_sql = "CREATE TABLE if not exists [MonitorData]"+
"(_id integer primary key autoincrement,object object)";
db.execSQL(create_mail_sql);
db.setTransactionSuccessful();
db.endTransaction();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
//增
public void insert(String table, String nullColumnHack, ContentValues values){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.insert(table, nullColumnHack, values);
db.setTransactionSuccessful();
db.endTransaction();
}
//删
public void delete(String table , String whereClause , String[] whereArgs){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.delete(table, whereClause, whereArgs);
db.setTransactionSuccessful();
db.endTransaction();
}
//改
public void update(String table, ContentValues values,
String whereClause, String[] whereArgs){
SQLiteDatabase db = this.getWritableDatabase();
db.beginTransaction();
db.update(table, values, whereClause, whereArgs);
db.setTransactionSuccessful();
db.endTransaction();
}
//查
public Cursor read(String sql ,String[] args){
SQLiteDatabase db = this.getReadableDatabase();
db.beginTransaction();
Cursor cursor = db.rawQuery(sql, args);
db.setTransactionSuccessful();
db.endTransaction();
return cursor;
}
}
然后在需要使用的activity或者fragment里:
DBServices db = new DBServices(this.getContext());
db = new DBServices(this.getContext());
/** * 保存数据 */ public void saveData(MonitorDataObject object) { ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); try { ObjectOutputStream objectOutputStream = new ObjectOutputStream(arrayOutputStream); objectOutputStream.writeObject(object); objectOutputStream.flush(); byte data[] = arrayOutputStream.toByteArray(); objectOutputStream.close(); arrayOutputStream.close(); SQLiteDatabase database = db.getWritableDatabase(); database.execSQL("insert into MonitorData (object) values(?)", new Object[] { data }); database.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
这就直接存了类到数据表了。
怎么拿去类呢,下面是拿去这个类的相关代码:
DBServices db = new DBServices(this);//定义变量
db = new DBServices(this);//初始化
//拿到主键_id的列表方便查询,通过object是查不到的
public ArrayList<Integer> getAllInt() {
ArrayList<Integer> persons = new ArrayList<Integer>();
SQLiteDatabase database = db.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from MonitorData", null);
if (cursor != null) {
while (cursor.moveToNext()) {
//如果你代码中有用它从数据库中取一个整型值,需要注意:如果数据库中的这一个数据恰好是null,而null又不是int,此时并不会抛出NumberFormatException 异常,而是直接返回0!
int person =cursor.getInt(0);
persons.add(person);
}
}
Log.d("Persons-Count",Integer.toString(persons.size()));
return persons;
}
//拿去数据
public ArrayList<MonitorDataObject> getAllObject() {
ArrayList<MonitorDataObject> persons = new ArrayList<MonitorDataObject>
();
SQLiteDatabase database = db.getReadableDatabase();
Cursor cursor = database.rawQuery("select * from MonitorData", null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.d("data-id",cursor.getString(0));
byte data[] = cursor.getBlob(cursor.getColumnIndex("object"));
ByteArrayInputStream arrayInputStream = new
ByteArrayInputStream(data);
try {
ObjectInputStream inputStream = new ObjectInputStream
(arrayInputStream);
MonitorDataObject person = (MonitorDataObject)
inputStream.readObject();
persons.add(person);
inputStream.close();
arrayInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Log.d("Persons-Count",Integer.toString(persons.size()));
return persons;
}下面举一个删除的例子:
DBServices db = new DBServices(this);
db = new DBServices(this);
//index需要删除的_id,上面代码有拿到id的列表
String[] args = {String.valueOf(index)};
db.delete("MonitorData","_id=?",args);
记录一下,方便以后查询。
相关文章推荐
- Unity项目中使用SQLite来管理本地数据存储
- 使用SQLite做本地数据缓存的思考
- 安卓开发SQlite使用执行SQL语句一些简单的处理——1.创建数据库,表和添加数据
- iOS开发 - OC - 实现本地数据存储的几种方式二(直接使用sqlite)
- listview动态添加数据,使用sqlite对本地数据库增删改查
- [Unity3D]手机3D游戏开发:如何实现最高分的存储与显示(四)----使用PlayerPrefs存储数据到本地
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- 使用 SQL 语句从数据库一个表中随机获取一些数据
- SQLite 3 一些基本使用
- 使用AO往MDB和SDE写数据的一些经验之谈
- Entity Framework中使用SQLite的一些问题
- SQLite 3 一些基本的使用
- SQLite 3 一些基本使用
- Java写的手机计费系统(作为学习参考的实例:关键是Java类库里面的date和Calendar的使用和相互转换,以及一些日期的实际问题)
- sqlite数据使用
- 关于sql时间函数的一些简单的例子(本机本地时间,国外服务器不能使用)
- 使用DATETIME型数据的一些心得[等整理]
- 使用bcp批量导入数据时碰到的一些问题及解决
- SQLite 3 一些基本使用
- 关于oracle中LONG数据类型使用上的一些总结