使用手机本地sqlite数据库存一些类
来源:互联网 发布:视频解析源码 编辑:程序博客网 时间:2024/06/10 02:04
最近工作需要,把用户检测的一些数据存到本地,因为检测完用户可能不想上传,或者上传失败,网络断了。这时候我们可以提供一个历史数据上传的功能,方便用户选择合适的数据上传,避免浪费开销,话不多说直接贴代码。
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);}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.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();}@Overridepublic 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);
记录一下,方便以后查询。
阅读全文
0 0
- 使用手机本地sqlite数据库存一些类
- Unity项目中使用SQLite来管理本地数据存储
- 使用SQLite本地数据库
- 使用SQLite本地数据库
- h5 使用本地sqlite
- ionic---数据本地存储sqlite
- b3log的ArticleSender不是往本地数据库存文章的
- 一些SQLite数据的说明
- 安卓中数据库存本地储路径和Shareprefence本地存储路径以及将文件转换成String字符串的工具类
- C#数据本地存储方案之SQLite
- C#数据本地存储方案之SQLite
- C#数据本地存储方案之SQLite
- C# SQLite数据本地存储方案
- android本地数据存贮之sqlite
- Android本地数据存储之SQLite
- 事务(sqlite本地数据操作优化)
- C#数据本地存储方案之SQLite
- 在本地创建SQLite数据库存储数据
- sqlite数据库加密方案
- 为什么(什么时候)使用Redux?(三张图)
- java byte操作
- 常用的pcl滤波
- 树形下拉框列出各个对应的内容
- 使用手机本地sqlite数据库存一些类
- NIO详解三
- Linux的进程相关命令
- JavaScript事件总结
- Cg Programming/Unity/Soft Shadows of Spheres球体的软阴影
- 【Python语法笔记】while循环
- 网络工程师成长日记150-好可怕的网管
- spring boot项目中处理Schedule定时任务
- webpack的简单配置vue项目