Android-SQLite和SQLiteOpenHelper
来源:互联网 发布:拓扑康102n 导入数据 编辑:程序博客网 时间:2024/05/20 05:29
参考:
Android 操作SQLite基本用法
一、 SQLite介绍
SQLite是android内置的一个很小的关系型数据库。
SQLite的官网是http://www.sqlite.org/,可以去下载一些文档或相关信息。
SQLite的特点:
轻量级
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态 库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。
不需要”安装”
SQLite的核心引擎本身不依赖第三方的软件,使用它也不需要”安装”。有点类似那种绿色软件。
单一文件
数据库中所有的信息(比如表、视图等)都包含在一个文件内。这个文件可以自由复制到其它目录或其它机器上。
跨平台/可移植性
除了主流操作系统 windows,linux之后,SQLite还支持其它一些不常用的操作系统。
弱类型的字段
同一列中的数据可以是不同类型
开源
SQLite数据类型
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下几种常用的数据类型:
NULL: 这个值为空值VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。CHAR(n):长度固定为n的字串,n不能超过 254。INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改 变格式。DATA :包含了 年份、月份、日期。TIME: 包含了 小时、分钟、秒。
SQLiteDatabase的介绍
Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。
//SQLiteDatabase的常用方法 openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)打开或创建数据库insert(String table,String nullColumnHack,ContentValues values)插入一条记录delete(String table,String whereClause,String[] whereArgs)删除一条记录query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)查询一条记录update(String table,ContentValues values,String whereClause,String[] whereArgs)修改记录execSQL(String sql)执行一条SQL语句close()关闭数据库
二、 SQLiteOpenHelper的使用方法
SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。
可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。
所有继承了这个类的类都必须实现下面这样的一个构造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
第一个参数:Context类型,上下文对象。
第二个参数:String类型,数据库的名称
第三个参数:CursorFactory类型
第四个参数:int类型,数据库版本
SQLiteOpenHelper 类的使用步骤:
1、 创建SQLiteOpenHelper类的子类MySQLiteOpenHelper 类,实现SQLiteOpenHelper类中的抽象方法onCreate()和onUpgrade();
//打开或者创建数据库db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.lingdududu.db/databases/stu.db",null);
2、调用 MySQLiteOpenHelper 对象的getWritableDatabase 或 getReadableDatabase方法, 获得SQLiteDatabase 对象;
MySQLiteOpenHelper dbHelper=new MySQLiteOpenHelper(getContext());SQLiteDatabase db = dbHelper.getReadableDatabase(); // 磁盘满了依然可读
注意:
getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。
但getWritableDatabase() 方法以写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。
getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
因此建议使用getReadableDatabase()方法来获打开数据库。
3、创建表。实际上是执行DML操作的Create;
private void createTable(SQLiteDatabase db){ //创建表SQL语句 String stu_table="create table usertable(_id integer primary key autoincrement,sname text,snumber text)"; //执行SQL语句 db.execSQL(stu_table); }
4、调用SQLiteDatabase 对象的execSQL()方法,执行 update,insert,delete操作;调用rawQuery()方法执行select查询操作;
5、 如果执行的是查询操作,则对返回的Cursor进一步处理。
6、关闭db , 关闭cursor。
插入数据:
//插入数据方法一private void insert(SQLiteDatabase db){ //实例化常量值 ContentValues cValue = new ContentValues(); //添加用户名 cValue.put("sname","xiaoming"); //添加密码 cValue.put("snumber","01005"); //调用insert()方法插入数据 db.insert("stu_table",null,cValue); } //插入数据方法二private void insert(SQLiteDatabase db){ //插入数据SQL语句 String stu_sql="insert into stu_table(sname,snumber) values('xiaoming','01005')"; //执行SQL语句 db.execSQL(sql); }
删:
//删除方法一private void delete(SQLiteDatabase db) { //删除条件 String whereClause = "id=?"; //删除条件参数 String[] whereArgs = {String.valueOf(2)}; //执行删除 db.delete("stu_table",whereClause,whereArgs); } //删除方法二private void delete(SQLiteDatabase db) { //删除SQL语句 String sql = "delete from stu_table where _id = 6"; //执行SQL语句 db.execSQL(sql); }
修改:
修改方法一:private void update(SQLiteDatabase db) { //实例化内容值 ContentValues values = new ContentValues(); //在values中添加内容 values.put("snumber","101003"); //修改条件 String whereClause = "id=?"; //修改添加参数 String[] whereArgs={String.valuesOf(1)}; //修改 db.update("usertable",values,whereClause,whereArgs); } //修改方法二:private void update(SQLiteDatabase db){ //修改SQL语句 String sql = "update stu_table set snumber = 654321 where id = 1"; //执行SQL db.execSQL(sql); }
查
//查询方法一: //参数1:表名 //参数2:要想显示的列 //参数3:where子句 //参数4:where子句对应的条件值 //参数5:分组方式 //参数6:having条件 //参数7:排序方式 Cursor cursor = db.query("stu_table", new String[]{"id", "sname", "sage", "ssex"}, "id=?", new String[]{"1"}, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("sname")); String age = cursor.getString(cursor.getColumnIndex("sage")); String sex = cursor.getString(cursor.getColumnIndex("ssex")); System.out.println("query------->" + "姓名:" + name + " " + "年龄:" + age + " " + "性别:" + sex); }//查询方法二: //查询数据:返回的是一个Cursor对象 public Cursor query() { String sql = "select * from people"; //获取SQLiteDatabase对象实例 db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(sql, null); return cursor; }
删除指定表
private void drop(SQLiteDatabase db){ //删除表的SQL语句 String sql ="DROP TABLE stu_table"; //执行SQL db.execSQL(sql); }
示例:
StuDBHelper .java
package com.example.test.demo;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/** * Created by Administrator on 2017/5/12. */public class StuDBHelper extends SQLiteOpenHelper {//这是一个辅助类,用来管理数据库的创建和数据库的版本。 private static final String TAG = "TestSQLite"; public static final int VERSION = 1; /*必须带有构造方法*/ public StuDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } /*在数据库第一次生成的时候会调用这个方法, 也就是说,只有在创建数据库的时候才会调用,当然也有一些其它的情况,一般我们在这个方法里边生成数据库表。*/ @Override public void onCreate(SQLiteDatabase db) { String sql = "create table stu_table(id int,sname varchar(20),sage int,ssex varchar(10))"; //输出创建数据库的日志信息 Log.i(TAG, "create Database------------->"); //execSQL函数用于执行SQL语句 db.execSQL(sql); } /*当数据库需要升级的时候,Android系统会主动的调用这个方法。 一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。*/ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //输出更新数据库的日志信息 Log.i(TAG, "update Database------------->"); }}
SQLiteActivity .java
package com.example.test.demo;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.View;import android.widget.Button;import com.example.test.R;/** * Created by Administrator on 2017/5/12. */public class SQLiteActivity extends Activity { //声明各个按钮 private Button createBtn; private Button insertBtn; private Button updateBtn; private Button queryBtn; private Button deleteBtn; private Button ModifyBtn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //调用creatView方法 creatView(); //setListener方法 setListener(); } //通过findViewById获得Button对象的方法 private void creatView() { createBtn = (Button) findViewById(R.id.createDatabase); updateBtn = (Button) findViewById(R.id.updateDatabase); insertBtn = (Button) findViewById(R.id.insert); ModifyBtn = (Button) findViewById(R.id.update); queryBtn = (Button) findViewById(R.id.query); deleteBtn = (Button) findViewById(R.id.delete); } //为按钮注册监听的方法 private void setListener() { createBtn.setOnClickListener(new CreateListener()); updateBtn.setOnClickListener(new UpdateListener()); insertBtn.setOnClickListener(new InsertListener()); ModifyBtn.setOnClickListener(new ModifyListener()); queryBtn.setOnClickListener(new QueryListener()); deleteBtn.setOnClickListener(new DeleteListener()); } //创建数据库的方法------------------------------------------------------------------------------ class CreateListener implements View.OnClickListener { @Override public void onClick(View v) { //创建StuDBHelper对象 StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this, "stu_db", null, 2); //得到一个可读的SQLiteDatabase对象 SQLiteDatabase db = dbHelper.getReadableDatabase(); } } //更新数据库的方法------------------------------------------------------------------------------ class UpdateListener implements View.OnClickListener { @Override public void onClick(View v) { // 数据库版本的更新,由原来的1变为2 StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this, "stu_db", null, 2); SQLiteDatabase db = dbHelper.getReadableDatabase(); } } //插入数据的方法------------------------------------------------------------------------------ class InsertListener implements View.OnClickListener { @Override public void onClick(View v) { StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this, "stu_db", null, 2); //得到一个可写的数据库 SQLiteDatabase db = dbHelper.getWritableDatabase(); //生成ContentValues对象 //key:列名,value:想插入的值 ContentValues cv = new ContentValues(); //往ContentValues对象存放数据,键-值对模式 cv.put("id", 1); cv.put("sname", "xiaoming"); cv.put("sage", 21); cv.put("ssex", "male"); //调用insert方法,将数据插入数据库 db.insert("stu_table", null, cv); //关闭数据库 db.close(); } } //查询数据的方法------------------------------------------------------------------------------ class QueryListener implements View.OnClickListener { @Override public void onClick(View v) { StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this, "stu_db", null, 2); //得到一个可写的数据库 SQLiteDatabase db = dbHelper.getReadableDatabase(); //参数1:表名 //参数2:要想显示的列 //参数3:where子句 //参数4:where子句对应的条件值 //参数5:分组方式 //参数6:having条件 //参数7:排序方式 Cursor cursor = db.query("stu_table", new String[]{"id", "sname", "sage", "ssex"}, "id=?", new String[]{"1"}, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("sname")); String age = cursor.getString(cursor.getColumnIndex("sage")); String sex = cursor.getString(cursor.getColumnIndex("ssex")); System.out.println("query------->" + "姓名:" + name + " " + "年龄:" + age + " " + "性别:" + sex); } //关闭数据库 db.close(); } } //修改数据的方法------------------------------------------------------------------------------ class ModifyListener implements View.OnClickListener { @Override public void onClick(View v) { StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this, "stu_db", null, 2); //得到一个可写的数据库 SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("sage", "23"); //where 子句 "?"是占位符号,对应后面的"1", String whereClause = "id=?"; String[] whereArgs = {String.valueOf(1)}; //参数1 是要更新的表名 //参数2 是一个ContentValeus对象 //参数3 是where子句 db.update("stu_table", cv, whereClause, whereArgs); } } //删除数据的方法------------------------------------------------------------------------------ class DeleteListener implements View.OnClickListener { @Override public void onClick(View v) { StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this, "stu_db", null, 2); //得到一个可写的数据库 SQLiteDatabase db = dbHelper.getReadableDatabase(); String whereClauses = "id=?"; String[] whereArgs = {String.valueOf(2)}; //调用delete方法,删除数据 db.delete("stu_table", whereClauses, whereArgs); } }}
- Android-SQLite和SQLiteOpenHelper
- android SQLite SQLiteOpenHelper
- SQLite和SQLiteOpenHelper
- 《一》Android 数据库 SQlite SQLiteOpenHelper
- 《二》Android 数据库 SQlite SQLiteOpenHelper
- Android -SQLite 操作第一章 SQLiteOpenHelper
- android SQLite数据库及SQLiteOpenHelper
- Android Sqlite SQLiteOpenHelper建立数据库
- Android SQLite操作之“SQLiteOpenHelper”
- android SQLite操作方法总结,SQLite用法,SQLiteOpenHelper
- android SQLite操作方法总结,SQLite用法,SQLiteOpenHelper
- at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
- Android 数据库SQLITE(SQLITEOPENHELPER运用)
- Android中的SQLite SQLiteOpenHelper SQLiteDatabase及其例子
- Android中继承SQLiteOpenHelper调用Sqlite数据库
- Android中SQLite之SQLiteOpenHelper详解
- Android中SQLite之SQLiteOpenHelper详解
- Android SQLite数据库之三,SQLiteOpenHelper
- BZOJ3438 小M的作物-最小割
- 【最小生成树】洛谷 P1546 最短网络 Agri-Net
- c语言--指针
- 一位ACMer过来人的心得
- android5.0和android6.0ble开发时要注意的两点
- Android-SQLite和SQLiteOpenHelper
- 支付宝的app支付
- #ifndef 与 #if !define区别
- USB Type-C工作原理深度解析
- C++后台开发之编译与链接2017/5/12
- poj3461 KMP
- JavaScript自定义跨浏览器事件处理工具
- 微信小程序入门六本地缓存和搜索
- Java SE 02 流程控制和数组