转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
前言
之前学习了多种数据存储的方式,但是要是存储数据多了,前面的方式就不太合适了
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
前言
之前学习了多种数据存储的方式,但是要是存储数据多了,前面的方式就不太合适了,今天我们来学习手机的数据库知识。
SQLite数据库
数据库:它就是一个软件,需要安装,安装完后就有自己的目录结构。都有客户端和服务端,所有的数据库都实现了SQL标准。它是一个轻量级数据库,设计目的是嵌入式的,而且它占用的资源非常少
注意:除了主键不能存储任意的类型之外,其他的字段可以存放任意的数据类型。
Cmd操作指令:
sqlite3 qjq.db 进入数据库
.tables 查看数据库里面的表
创建数据库文件:三种方式:
第一种通过上下文创建数据库:
- public class DBsqlite {
- private Context context;
- public DBsqlite(Context context) {
- super();
- this.context = context;
- }
- public void createDB() {
- //通过上下文创建数据库
- context.openOrCreateDatabase("persons.db", Context.MODE_PRIVATE, null);
- }
- }
第二种SQLiteDatabase创建数据库
- public void createDB(){
- String dir="/data/data/"+context.getPackageName();
- File file=new File(dir,"persons.db");
- SQLiteDatabase.openOrCreateDatabase(file, null);
- }
第三种创建一个help类继承SQLiteOpenHelper实现DBhelp构造onCreate方法onUpgrade方法
- public class DBhelp extends SQLiteOpenHelper {
- public DBhelp(Context context) {
- // 上下文 ,数据库名,游标工厂 ,数据版本
- super(context, "persons.db", null, 2);
- // TODO Auto-generated constructor stub
- }
- //数据库第一次创建之后调用该方法。创建表、视图。。。 或者初始化表信息
- public void onCreate(SQLiteDatabase db) {
- // 创建数据库
- db.execSQL("create table fish(_id integer primary key autoincrement,name text)");
- }
-
- @Override
- //当数据版本被改变则会执行该方法super(context, "persons.db", null, 3);
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // 版本修改表添加一列
- db.execSQL("ALTER TABLE fish ADD amount integer");
- }
Crud(增删改查)
以下分别用两种方式crud了,一种是面向SQL ,一种是面向对象,但是面向对象的源码里面其实也是在帮你拼接sql。
- public class OtherFishService {
- private SQLiteOpenHelper mOpenHelper;
-
- public OtherFishService(Context context) {
- // TODO Auto-generated constructor stub
- mOpenHelper = new DBHelper(context);
- }
-
- /**
- * 插入数据
- * @param name
- */
- public void insert(String name){
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- // String sql = "insert into fish(name) values(?)";
- if(db.isOpen()){
- // db.execSQL(sql, new Object[]{name});
- //insert into fish
- //ContentValues里面就是要插入的值
- ContentValues values = new ContentValues();
- values.put("name", name);
- db.insert("fish", "_id", values);
- db.close();
- }
- }
-
-
- public List<Fish> query(){
-
- List<Fish> fishs = new ArrayList<Fish>();
-
- SQLiteDatabase db = mOpenHelper.getReadableDatabase();
- // String sql ="select * from fish";
- if(db.isOpen()){
- //cursor 就是resultset
- // Cursor cursor = db.rawQuery(sql, null);
- Cursor cursor = db.query("fish",//表名
- new String[]{"*"},//要查询的列名
- null,//查询条件
- null,//条件参数
- null,//分组
- null,//条件
- null);//排序
- while(cursor.moveToNext()){
- //得到_id的下标
- int column_index = cursor.getColumnIndex("_id");
- //得到_id的值
- int _id = cursor.getInt(column_index);
-
- String name = cursor.getString(cursor.getColumnIndex("name"));
-
- Fish fish = new Fish(_id, name);
- fishs.add(fish);
- }
- //cursor使用完成之后一定要关闭
- cursor.close();
- db.close();
- }
- return fishs;
- }
-
- public void update(Fish fish){
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- if(db.isOpen()){
- // String sql = "update Fish set name = ? where _id = ?";
- // db.execSQL(sql,new Object[]{fish.name,fish._id});
- ContentValues values = new ContentValues();
- values.put("name", fish.name);
- String whereClause = " _id = ?";
- String[] whereArgs = new String[]{fish._id+""};
- db.update("fish", values, whereClause, whereArgs);
- }
- }
-
- public void delete(int _id){
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- if(db.isOpen()){
- // String sql = "delete from fish where _id = ?";
- // db.execSQL(sql,new Object[]{_id});
- String whereClause = " _id = ?";
- String[] whereArgs = new String[]{_id+""};
- db.delete("fish", whereClause, whereArgs);
- }
- }
- }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。