Android开发进阶系列(七) 使用数据库
来源:互联网 发布:python 显示 字符集 编辑:程序博客网 时间:2024/06/05 18:11
数据库的概念不用多说了吧,增删改查这些基本语句大概的样子也应该略有所闻了。Android的数据库略有不同,不过也没有那么神秘,对于新手来说,一个字,开练!
在我的项目里,我是新建了一个类负责数据库的操作的,下面上代码:
- 版本号
// 数据库名称private static String DBName="easyretail.db";LocalDatabase(Context paramContext) { super(paramContext, DBName, null, 2); // 2为version}
- 建表
@Override public void onCreate(SQLiteDatabase db) { try { db.execSQL("CREATE TABLE IF NOT EXISTS stock (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, " + "cost DECIMAL(4,1), price DECIMAL(4,1) NOT NULL, amount INTEGER NOT NULL, total_sold INTEGER NOT NULL, stock_date Text NOT NULL, pic BLOB NULL);"); db.execSQL("CREATE TABLE IF NOT EXISTS record (id INTEGER PRIMARY KEY AUTOINCREMENT, payment DECIMAL(6,1) NOT NULL, profit DECIMAL(6,1) NOT NULL, " + "add_time Text NOT NULL, year INTEGER NOT NULL, month INTEGER NOT NULL, day INTEGER NOT NULL);"); db.execSQL("CREATE TABLE IF NOT EXISTS recorddetail (id INTEGER PRIMARY KEY AUTOINCREMENT, record_id INTEGER, goods_id INTEGER," + "goods_name TEXT NOT NULL, goods_price DECIMAL(4,1) NOT NULL, goods_amount INTEGER NOT NULL, goods_payment DECIMAL(4,1) NOT NULL, goods_pic BLOB NULL);"); } catch(Exception e) { e.printStackTrace(); } }
- 更新表
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(" ALTER TABLE record ADD profit DECIMAL(6,1) NULL"); /* version=2时的更新 //db.execSQL("CREATE TABLE IF NOT EXISTS record (id INTEGER PRIMARY KEY AUTOINCREMENT, payment DECIMAL(6,1) NOT NULL, " + // "add_time Text NOT NULL, year INTEGER NOT NULL, month INTEGER NOT NULL, day INTEGER NOT NULL);"); //db.execSQL("CREATE TABLE IF NOT EXISTS recorddetail (id INTEGER PRIMARY KEY AUTOINCREMENT, record_id INTEGER, goods_id INTEGER," + // "goods_name TEXT NOT NULL, goods_price DECIMAL(4,1) NOT NULL, goods_amount INTEGER NOT NULL, goods_payment DECIMAL(4,1) NOT NULL);"); */ // version = 3时 //db.execSQL(" ALTER TABLE stock ADD pic BLOB NULL "); //往表中增加一列图片类型 // version =4 时 //db.execSQL(" ALTER TABLE recorddetail ADD goods_pic BLOB NULL "); //往表中增加一列图片类型 }
注意,如果你以前发布的版本中数据库版本也不同,那你可能需要判断当前数据库的版本来决定执行哪些更新语句。
- 数据的增删改查
/* * 查询数据库,给goodsList赋值 */ public void InitGoodsList() { Log.v(FusionField.TAG, "InitGoodsList() called"); try { SQLiteDatabase localSQLiteDatabase = getReadableDatabase(); //Cursor localCursor = localSQLiteDatabase.query(GoodsTableName, null,null,null, null, null, null); Cursor localCursor = localSQLiteDatabase.rawQuery("select * from stock",null); if (localCursor != null) { if(FusionField.goodsList==null) FusionField.goodsList = new ArrayList<GoodsInfo>(); GoodsInfo goods; while(localCursor.moveToNext()){ int id = localCursor.getInt(localCursor.getColumnIndex(GoodsTable_Column_ID)); goods = FusionField.FindGoodsByID(id); if(goods==null){ goods = new GoodsInfo(); goods.setID(id); FusionField.goodsList.add(goods); } String name = localCursor.getString(localCursor.getColumnIndex(GoodsTable_Column_Name)); float cost = localCursor.getFloat(localCursor.getColumnIndex(GoodsTable_Column_Cost)); float price = localCursor.getFloat(localCursor.getColumnIndex(GoodsTable_Column_Price)); int amount = localCursor.getInt(localCursor.getColumnIndex(GoodsTable_Column_Amount)); String stock_date = localCursor.getString(localCursor.getColumnIndex(GoodsTable_Column_StockDate)); int total_sold = localCursor.getInt(localCursor.getColumnIndex(GoodsTable_Column_TotalSold)); byte[] pic = localCursor.getBlob(localCursor.getColumnIndex(GoodsTable_Column_Pic)); goods.setName(name); goods.setCost(cost); goods.setPrice(price); goods.setAmount(amount); goods.setStockDate(FusionField.ConverStringToDate(stock_date)); goods.setTotalSold(total_sold); if(pic!=null) goods.setPicture(FusionField.ConvertByteToBitmap(pic)); } localCursor.close(); } localSQLiteDatabase.close(); } catch (SQLiteException localSQLiteException) { Log.v(FusionField.TAG, "SQLite exception in LocalDatabase.InitGoodsList(): " + localSQLiteException.getMessage()); } } /* * 修改数据 * return 0: succeeded * -1: failed */ public Boolean ModifyGoods(int id, String name, int amount, float cost, float price, byte[] pic) { Log.v(FusionField.TAG, "ModifyGoods(" + id + ", " + name + ", " + amount + ", " + cost + ", " + price + ") called"); Boolean ret = true; try { SQLiteDatabase localSQLiteDatabase = getWritableDatabase(); Cursor localCursor = localSQLiteDatabase.query(GoodsTableName, new String[]{"amount"}, "id = ?", new String[]{String.valueOf(id)}, null, null, null); if (localCursor != null && localCursor.moveToFirst()) { ContentValues localContentValues = new ContentValues(); localContentValues.put("name", name); // 名称 localContentValues.put("amount", amount); // 数量 localContentValues.put("cost", cost); // 成本 localContentValues.put("price", price); // 价格 localContentValues.put("pic", pic); // 图片 localSQLiteDatabase.update(GoodsTableName, localContentValues, "id = ?", new String[]{String.valueOf(id)}); } else ret = false; // Error, not exists localCursor.close(); localSQLiteDatabase.close(); } catch (SQLiteException localSQLiteException) { Log.v(FusionField.TAG, "SQLite exception in LocalDatabase.UpdateStock(): " + localSQLiteException.getMessage()); ret = false; } return ret; } /* * 删除某商品 */ public Boolean DeleteGoodsFromStock(int id) { Log.v(FusionField.TAG, "DeleteGoodsFromStock(" + id + ") called"); Boolean ret = true; try { SQLiteDatabase localSQLiteDatabase = getWritableDatabase(); localSQLiteDatabase.delete(GoodsTableName, "id = ?", new String[]{String.valueOf(id)}); localSQLiteDatabase.close(); } catch (SQLiteException localSQLiteException) { Log.v(FusionField.TAG, "SQLite exception in LocalDatabase.DeleteGoodsFromStock(): " + localSQLiteException.getMessage()); ret = false; } return ret; }
- * Android开发进阶系列(一) 序言 *
- * Android开发进阶系列(二) Tab页界面布局 *
- * Android开发进阶系列(三) 系统参数的获取和Broadcast *
- * Android开发进阶系列(四) 左移拉出Menu菜单界面布局 *
- * Android开发进阶系列(五) 连接服务器更新APK或下载资源文件 *
- * Android开发进阶系列(六) ListView的基本用法 *
- * Android开发进阶系列(七) 使用数据库 *
- * Android开发进阶系列(八) 界面美化之自定义弹出框 *
- * Android开发进阶系列(九) AChartEngine专题 *
0 0
- Android开发进阶系列(七) 使用数据库
- Android开发进阶系列(一) 序言
- Android开发进阶系列(二) Tab页界面布局
- Android开发进阶系列(六) ListView的基本用法
- Android进阶系列-手写数据库框架
- Android进阶系列之1:数据库加密
- Android 开发进阶系列博文介绍
- HenCoder Android开发进阶系列学习笔记
- Cocos2d开发系列(七)
- Cocos2d开发系列(七)
- Android开发进阶(七)-- Android客户端访问PHP服务器的详细过程
- Android开发进阶(七)-- Android客户端访问PHP服务器的详细过程
- Android Studio使用技巧系列教程(七)
- Android Studio使用技巧系列教程(七)
- 【Android Native Code开发系列】七 使用NDK进行交叉编译 & 编译ACE for android
- Android进阶系列(1)--Git使用
- Android高手进阶教程(七)----Android 中Preferences的使用!
- Android开发进阶之NIO非阻塞包(七)
- 将sin()与cos()显示在同一个网格里
- 一步一步学习Swift之(二):好玩的工具playground与swfit基础语法
- UART和RS232/RS485的关系是什么?
- 目标检测之LatentSVM和可变形部件模型(DPM:Deformable Part Model)
- 超强、超详细Redis数据库入门教程(2)
- Android开发进阶系列(七) 使用数据库
- ZK配置参数
- Bitmap(位图)的理解
- Yii框架设计计划任务脚本+linux下crontab执行
- Search in Rotated Sorted Array-Leetcode
- 利用File Zilla在AWS的EC2虚拟机上建FTP传输文件(Win系统)
- Java类中重写equals()方法
- umask与文件默认权限
- TreeMap源码分析(red-black树)