Android App开发基础篇—数据存储(SQLite数据库)
来源:互联网 发布:nginx 允许访问目录 编辑:程序博客网 时间:2024/05/22 01:57
Android App开发基础篇—数据存储(SQLite数据库)
前言:Android中提供了对SQLite数据库的支持。开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作。
一、创建SQLite数据库
要在应用中使用SQLite数据库,可以通过创建一个继承SQLiteOpenHelper类的辅助类,然后重写onCreate()方法,例如:
package com.test.testapplication;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by linyingkun on 2017/3/3. */public class DBHelper extends SQLiteOpenHelper { private Context mContext; //直接指定数据库名称、版本号。也可以使用默认生成的, //带有数据库名、数据库版本号等参数的构造方法,然后 //在获取辅助类对象的时候再动态指定名称和版本号。 public DBHelper(Context context) { super(context, "testdb", null, 1); mContext = context; } //在onCreate()方法里面执行SQL语句,如建表 //如果数据库和表都已存在,则该方法不会再执行 @Override public void onCreate(SQLiteDatabase db) { String create_table = "CREATE TABLE students(id INTEGER PRIMARY KEY AUTOINCREMENT," + "name VARCHAR(20),age VARCHAR(20));"; db.execSQL(create_table); } //当数据库版本发生变化时,该方法被调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
二、创建数据库并对数据进行操作
2.1 创建数据库
完成步骤一后,在应用中需要使用数据库的地方,先获得一个辅助类对象,然后调用getReadableDatabase()或者getWriteableDatabase()方法创建数据库对象。通过此步骤,如果系统中不存在同名数据库,则将在系统的/data/data/包名/databases目录下创建一个辅助类中指定名称的数据库,同时onCreate()方法会被调用。但是,如果系统中已存在同名数据库,则onCreate()方法不会再被调用,只有当数据版本发生变化时,onUpgrade()方法会被调用。
DBHelper dbHelper = new DBHelper(this);SQLiteDatabase writableDatabase = dbHelper.getWritableDatabase();
2.2 对数据库中数据的操作
要对数据库中的数据进行操作,可以直接使用数据库对象执行对应的SQL语句,也可以通过ORM(对象关系映射)的方法。下面一起来看示例:
2.2.1 增
普通方法:
//在数据库表中插入数据的SQL语句,格式为//insert into 表名 (字段1,字段2,...) values ("数据1","数据2",...)//注意字段和数据要一一对应。String insert = "INSERT INTO students (name,age) VALUES ('s1','20')";//通过数据库对象调用execSQL()方法执行SQL语句writableDatabase.execSQL(sql);
ORM方法:
//获取ContentValues对象ContentValues contentValues = new ContentValues();//向ContentValues对象插入想要插入数据库表的数据contentValues.put("name", "s2");contentValues.put("age", "21");//使用数据库对象调用insert()方法将Contentvalues对象插入对应的表中writableDatabase.insert("students", null, contentValues);
2.2.2 查
普通方法
//SQL查询语句,格式为//select 字段名(*号表示查询所有字段) from 表名 where 条件(如name="s1",省略条件则查询所有数据)String query = "SELECT * FROM students";//使用数据库对象的rawQuery()方法执行查询语句,返回一个Cursor对象//参数1:要执行的SQL语句//参数2:用于指定了查询条件,如没有条件则使用null。比如,查询语句//SELECT * FROM students WHERE name="s1",可写成//SELECT * FROM students WHERE name=?,然后在参数2的位置,通过new String[]{"s1"}指定条件。Cursor cursor = writableDatabase.rawQuery(query, null);//将cursor移动到第一位boolean b = cursor.moveToFirst();//如果b为true,表示有数据存在while (b) { //根据字段名获取该字段对应的下标index int nameIndex = cursor.getColumnIndex("name"); int ageIndex = cursor.getColumnIndex("age"); //根据字段下标获得对应的数据 String name = cursor.getString(nameIndex); String age = cursor.getString(ageIndex); //将cursor往下移动一位 b = cursor.moveToNext();}
ORM方法:
//使用数据库对象的query()方法执行查询,其中各参数分别代表//参数1:要查询的数据库表的表名//参数2:要查询的字段,String数组。如new String[]{"name","age"},//参数3:查询条件。String字符串,如name//参数4:条件语句占位符的填充,String数组。//参数5:分组语句//参数6:分组语句占位符的填充//参数7:排序//以上参数除了表名必须指定,其他的若无指定,都可以使用null。Cursor cursor = writableDatabase.query("students", new String[]{"name", "age"}, "name=?", new String[]{"s1"}, null, null, null);boolean b = cursor.moveToFirst();while (b) { int nameIndex = cursor.getColumnIndex("name"); int ageIndex = cursor.getColumnIndex("age"); String name = cursor.getString(nameIndex); String age = cursor.getString(ageIndex); b = cursor.moveToNext(); Log.e("MainActivity", name + ":" + age);}
2.2.3 删
普通方法
//删除数据的SQL语句,格式为//delete from 表名 where 条件String delete = "DELETE FROM students WHERE name=?";//使用数据库对象调用execSQL()方法执行SQL语句。//参数1:要执行的SQL语句//参数2:指定条件。可以直接写在SQL语句中,也可以像这里一样,//在语句中用 ?占位符替代具体条件,然后在参数2中再指定。//注:如果不指定条件,则SQL语句为 DELETE FROM students,//调用执行语句的方法为 writableDatabase.execSQL(delete);//此时整张表的数据都会被删除。writableDatabase.execSQL(delete, new String[]{"s1"});
ORM方法:
//使用数据库对象调用delete()方法。各参数分别表示//参数1:表名//参数2:条件语句//参数3:条件占位符填充writableDatabase.delete("students","name=?",new String[]{"s1"});
2.2.4 改
普通方法:
//修改数据的SQL语句,格式为//update 表名 set 字段1="数据",字段2="数据",... where 条件String update = "UPDATE students SET name=?,age=? WHERE id=?";//使用数据库对象调用execSQL()方法。writableDatabase.execSQL(update,new String[]{"小1","10","1"});
ORM方法:
//获取ContentValues对象ContentValues values =newContentValues();//向ContentValues对象插入要用于修改的数据values.put("name","小2");values.put("age","25");//使用数据库对象调用update()方法,各参数代表//参数1:表名//参数2:数据//参数3:条件语句//参数4:条件占位符填充writableDatabase.update("students",values,"id=?",newString[]{"26"});
后记:本篇简单记述了Android中SQLite数据库的使用方法。一般情况下,如果数据量不大,在代码中直接使用上述的方法不会出现什么问题。但是如果数据量很大,就有可能造成ANR或者程序崩溃。所以在使用SQLite数据库的时候需要谨慎。有条件的话,可以去更深入的学习一下数据库在实际开发中的使用技术。这样也可以有助于提升自己的技术水平。
- Android App开发基础篇—数据存储(SQLite数据库)
- Android——数据库sqlite存储数据
- Android数据存储—使用SQLite数据库
- Android数据存储—使用SQLite数据库
- android基础--使用嵌入式关系型SQLite数据库存储数据
- Android基础之十四数据存储 之 SQLite数据库详解
- 【Android 应用开发】Android 数据存储 之 SQLite数据库详解
- 【Android 应用开发】Android 数据存储 之 SQLite数据库详解
- android-数据存储-SQLite数据库
- android-SQLite数据库存储数据
- android数据存储----SQLite数据库
- Android中数据存储——SQLite数据库存储数据
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- 【Android 开发】:数据存储之 SQLite 数据库操作(二)
- 【Android 开发】:数据存储之 SQLite 数据库操作(三)
- Android开发之数据存储与访问(3)-SQLite数据库
- Android开发之数据存储与访问(4)-SQLite数据库
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- Java中常用的web服务器
- ionic2文档整理
- linux常见操作指令
- jmeter 之sql server 报错Response message: java.lang.UnsupportedOperationException: 此驱动程序不支持 Java Runtim
- easyUI(5)Resizable(调整大小)组件
- Android App开发基础篇—数据存储(SQLite数据库)
- RabbitMQ的参数详解
- 设计模式--观察者模式
- phpstorm 代码换行符 设置成unix分隔
- jzoj P1541 【USACO Open 2012银】书架Bookshelf
- PL/SQL developer基础语法学习(一)之变量
- Imap协议实现接收邮件
- Android Studio Run程序时自动执行自定义task
- wifi知识点