SQLite存储数据
来源:互联网 发布:端口占用解决方法 编辑:程序博客网 时间:2024/06/06 06:44
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。
它支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
首先我们需要自定义 MyDatabaseHelper 继承 SQLiteOpenHelper
public class MyDatabaseHelper extends SQLiteOpenHelper {private String mTableName = "HISTORY";//表名//列private static final String USER_ID = "user_id";private static final String PRODUCT_ID = "product_id";private static final String IMG_SRC = "img_src";private static final String PRODUCT_NAME = "product_name";private static final String PRODUCT_BRAND = "product_brand";private static final String MOBILE_PRICE = "mobile_price";private String[] mColumns = new String[]{USER_ID,PRODUCT_ID,IMG_SRC,PRODUCT_NAME,PRODUCT_BRAND,MOBILE_PRICE};/** * @param context * @param name 数据库名 * @param factory 一般传null * @param version 数据库版本,可以通过提高版本号进行数据库更新,会调用onUpgrade() */public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {StringBuilder CREATE_TABLE = new StringBuilder();CREATE_TABLE.append("create table if not exists " + mTableName + " (" + "id integer primary key autoincrement");for (int i = 0; i < mColumns.length; i++) {CREATE_TABLE .append(", " + mColumns[i]);}CREATE_TABLE .append(")");db.execSQL(CREATE_TABLE .toString());//根据SQL语句创建表格}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("drop table if exists " + mTableName);onCreate(db);}}然后我们需要一个类来对数据库操作进行封装,方便调用:
public class HistorySQLiteHelper {private static HistorySQLiteHelper mHistorySQLiteHelper;//单例设置public static HistorySQLiteHelper getInstance(){if (mHistorySQLiteHelper == null) {mHistorySQLiteHelper = new HistorySQLiteHelper();}return mHistorySQLiteHelper;}public MyDatabaseHelper dbHelper;private HistorySQLiteHelper() {
//生成SQLiteOpenHelper 实体dbHelper = new MyDatabaseHelper(App.getContext(), "LAOBAI.db", null, 1);dbHelper.onCreate(dbHelper.getWritableDatabase());}/** * 插入数据 * @param user_id 用户id */public void add(String user_id, Product info){if (info == null) {return;}SQLiteDatabase db = dbHelper.getWritableDatabase();delete(user_id, info.getProduct_id());ContentValues values = new ContentValues();values.put(USER_ID, user_id);values.put(PRODUCT_ID, info.getProduct_id());values.put(IMG_SRC, info.getImg_src());values.put(PRODUCT_NAME, info.getProduct_name());values.put(PRODUCT_BRAND, info.getProduct_brand());values.put(MOBILE_PRICE, info.getMobile_price());db.insert(getTableName(), null, values);}/** * 更新 */public void update(){}/** * 删除数据 * @param user_id * @param product_id */public void delete(String user_id, String product_id){SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("delete from " + getTableName() + " where user_id= '" + user_id + "' and product_id = '" + product_id + "'");}/** * 清空数据 */public void clear(){SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("delete from " + getTableName());}/** * 查询某个用户的记录 * @param user_id */public List<Product> query(String user_id){List<Product> list = new ArrayList<Product>();SQLiteDatabase db = dbHelper.getWritableDatabase();// 查询Book 表中所有的数据Cursor cursor = db.rawQuery("select * from " + getTableName() + " where user_id = ? order by id desc", new String[]{user_id});if (cursor.moveToFirst()) {do {if (list.size() > 20) {break;}// 遍历Cursor对象Product info = new Product();info.setProduct_id(cursor.getString(cursor.getColumnIndex(PRODUCT_ID)));info.setImg_src(cursor.getString(cursor.getColumnIndex(IMG_SRC)));info.setProduct_name(cursor.getString(cursor.getColumnIndex(PRODUCT_NAME)));info.setProduct_brand(cursor.getString(cursor.getColumnIndex(PRODUCT_BRAND)));info.setMobile_price(cursor.getString(cursor.getColumnIndex(MOBILE_PRICE)));list.add(info);} while (cursor.moveToNext());}cursor.close();return list;}/** * 获取用户的记录条数 * @param user_id * @return */public long queryCount(String user_id){SQLiteDatabase db = dbHelper.getWritableDatabase();Cursor cursor = db.rawQuery("select count(*) from " + getTableName() + " where user_id = ?", new String[]{user_id});cursor.moveToFirst();return cursor.getLong(0);}/** * 删除id最小的一条数据 * @param user_id */public void deleteFirst(String user_id){SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("delete from " + getTableName() + " where id= (select min(id) from " + getTableName() + " where user_id= '" + user_id + "')");}}
db.executeSQL(String sql); db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集通过自己编写的SQL语句进行操作;
也可以使用SQLiteDatabase提供的单独的操作方法
db.insert(String table, String nullColumnHack, ContentValues values); db.update(String table, Contentvalues values, String whereClause, String whereArgs); db.delete(String table, String whereClause, String whereArgs);第一个参数都是表示要操作的表名;
insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;
insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;
update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > ? and age < ?”等,最后的whereArgs参数是占位符的实际参数值;
delete方法的参数也是一样
0 0
- SQLite 的数据存储
- SQLite数据库存储数据
- SQLite大数据存储
- android数据存储--SQLite
- SQLite数据库存储数据
- SQLite数据库存储数据
- SQLite数据库存储数据
- [数据存储]Sqlite
- Android数据存储---SQLite
- SQLite数据库存储数据
- Android数据存储-SQLite
- SQLite数据库存储数据
- SQLite数据库存储数据
- android-数据存储sqlite
- SQLite数据存储
- SQLite数据存储
- 数据存储SQLite
- 数据存储--SQLite事务
- mongoDB常用命令和数据库迁移(亲测)
- Mayor's posters poj2528 线段树
- Picasso detected an unsupported OkHttp on the classpath的解决方法
- Linux下 环境变量/etc/profile、/etc/bashrc、~/.bashrc的区别
- regedit.msc
- SQLite存储数据
- scala(6)-数组的初始化以及循环
- 全面理解java异常机制
- java 对带T的美国时间转换方法
- Linux基本命令
- Android AES加密解密
- servlet/filter/listener/interceptor区别与联系
- java面向对象之多态
- java集合架构____Linklist