android sqlite
package com.example.myapi.db; import java.util.ArrayList; import java.util.List; 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 com.example.myapi.bean.GoodsInfo; /** * 客户端缓存数据库 * @author tony * */ public class DBHelper { public static final String _ID = "_id"; public static final String GOODSNAME = "goodsname"; public static final String GOODS_TYPE = "type"; public static final String GOODS_TAB_TYPE = "tab_type"; public static final String GOODS_PICPATH = "picpath"; public static final String GOODS_PRICE = "price"; public static final String DB_NAME = "room_db"; public static final String TABLE_NAME = "q_db"; public static final int VISION = 1; private Context context; private DataBaseHelper helper; private SQLiteDatabase read; private SQLiteDatabase write; public DBHelper(Context context){ this.context = context; helper = new DataBaseHelper(context); read = helper.getReadableDatabase();//创建用于读取的数据库 write = helper.getWritableDatabase();//创建用些写入的数据库 } /*private static DBHelper instance = new DBHelper(); public static DBHelper getInstance(Context context){ helper = new DataBaseHelper(context); return instance; }*/ /** * 向数据库中添加小商品 * @param info */ public void add(List<GoodsInfo> infos,String table){ try{ if("0".equals(table)){ for(GoodsInfo info : infos){ ContentValues values = new ContentValues(); values.put("goodsId", info.getId()); values.put("goodsName", info.getGoodsName()); values.put("goodsType", info.getType()); values.put("goodsPicName", info.getPicName()); values.put("goodsPrice", info.getGoodsPrice()); write.insert("tab_goods", null, values);//向数据库中插入数据 } }else{ for(GoodsInfo info : infos){ ContentValues values = new ContentValues(); values.put("objectId", info.getId()); values.put("objectName", info.getGoodsName()); values.put("objectType", info.getType()); values.put("objectPicName", info.getPicName()); values.put("objectPrice", info.getGoodsPrice()); write.insert("tab_object", null, values);//向数据库中插入数据 } } }catch(Exception e){ Log.e("add", e.getMessage()); } } /** * 删除所有的商品信息 */ public void del(String table){ try{ if(table.equals("0")){ write.delete("tab_goods", null, null); }else{ write.delete("tab_object", null, null); } }catch(Exception e){ Log.e("del", e.getMessage()); } } /** * 根据条件查询商品信息 * * * 他的query方法。这个query方法相对复杂,因为他将一个完整的SQL语句拆成了若干个部分: table:表名。相当于SQL的from后面的部分。那如果是多表联合查询怎么办?那就用逗号将两个表名分开,拼成一个字符串作为table的值。 columns:要查询出来的列名。相当于SQL的select后面的部分。 selection:查询条件,相当于SQL的where后面的部分,在这个语句中允许使用“?”,也就是说这个用法和JDBC中的PreparedStatement的用法相似。 selectionArgs:对应于selection的值,selection有几个问号,这里就得用几个值。两者必须一致,否则就会有异常。 groupBy:相当于SQL的group by后面的部分 having:相当于SQL的having后面的部分 orderBy:相当于SQL的order by后面的部分,如果是倒序,或者是联合排序,可以写成类似这样:String orderBy = “id desc, name”; limit:指定结果集的大小,它和Mysql的limit用法不太一样,mysql可以指定从多少行开始之后取多少条,例如“limit 100,10”,但是这里只支持一个数值。 c.moveToFirst(); 这一句也比较重要,如果读取数据之前,没有这一句,会有异常。 c.getString(1); 与JDBC一致了,Android不支持按字段名来取值,只能用序号。 * * @return * table 0:代表小商品表 1.带包损坏物品表 */ public List<GoodsInfo> getGoodsInfo(String table,String type){ List<GoodsInfo> infos = new ArrayList<GoodsInfo>(); Cursor cursor = null; try{ if(table.equals("0")){//小商品 cursor = read.query("tab_goods", new String[]{"goodsId,goodsName","goodsType","goodsPicName","goodsPrice"}, " goodsType=?", new String[]{type}, null, null, null); }else{//添加物品赔偿 cursor = read.query("tab_object", new String[] {"objectId","objectName","objectPrice","objectPicName","objectType"}, " objectType=?", new String[]{type}, null, null, null); } if (cursor.moveToFirst()) { do { GoodsInfo info = new GoodsInfo(); if(table.equals("0")){ info.setId(cursor.getString(cursor.getColumnIndexOrThrow("goodsId"))); info.setGoodsName(cursor.getString(cursor.getColumnIndexOrThrow("goodsName"))); info.setType(cursor.getString(cursor.getColumnIndexOrThrow("goodsType"))); info.setPicName(cursor.getString(cursor.getColumnIndexOrThrow("goodsPicName"))); info.setGoodsPrice(cursor.getString(cursor.getColumnIndexOrThrow("goodsPrice"))); infos.add(info); }else{ info.setId(cursor.getString(cursor.getColumnIndexOrThrow("objectId"))); info.setGoodsName(cursor.getString(cursor.getColumnIndexOrThrow("objectName"))); info.setType(cursor.getString(cursor.getColumnIndexOrThrow("objectType"))); info.setPicName(cursor.getString(cursor.getColumnIndexOrThrow("objectPicName"))); info.setGoodsPrice(cursor.getString(cursor.getColumnIndexOrThrow("objectPrice"))); infos.add(info); } } while (cursor.moveToNext()); } }catch(Exception e){ Log.e("getGoodsInfo", e.getMessage()); } return infos; } public List<GoodsInfo> setData(){ List<GoodsInfo> infos = new ArrayList<GoodsInfo>(); for(int i=0;i<10;i++){ GoodsInfo info = new GoodsInfo(); info.setGoodsName("ss"+i); info.setPhotoName("name"+i); info.setGoodsPrice("12 "+i); info.setTab_type("0"); info.setType(""+i); infos.add(info); } /*helper = new DBHelper(this); helper.add(infos);*/ return null; } /** * 数据库管理类 * @author tony * */ private class DataBaseHelper extends SQLiteOpenHelper{ public DataBaseHelper(Context context) { super(context, DB_NAME, null, VISION); } @Override public void onCreate(SQLiteDatabase db) { String sql_goods = "create table if not exists tab_goods(" + "_id integer primary key autoincrement," + "goodsId varchar(50)," + "goodsName varchar(50)," + "goodsType varchar(50)," + "goodsPicName varchar(50)," + "goodsPrice varchar(50)" + ");"; String sql_object = "create table if not exists tab_object(" + "_id integer primary key autoincrement," + "objectId varchar(50)," + "objectName varchar(50)," + "objectType varchar(50)," + "objectPrice varchar(50)," + "objectPicName varchar(50)" + ");" ; db.execSQL(sql_goods);//创建商品表 db.execSQL(sql_object);//创建损坏物品表 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探