Android中SQLite使用总结
2016-07-26 11:46
495 查看
简介
SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。特点
轻量级、不需要“安装”、单一文件、跨平台、可以移植性、弱类型字段、开源数据类型
一般数据采用的固定的静态数据类型,而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: 包含了 小时、分钟、秒
常见方法
1、创建表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); }
2、插入数据
①SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法,
参数1 表名称,
参数2 空列的默认值
参数3 ContentValues类型的一个封装了列名称和列值的Map;
②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行
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); }
3、删除数据
删除数据也有两种方法:
①调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法
参数1 表名称
参数2 删除条件
参数3 删除条件值数组
②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。
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); }
4、修改数据
修改数据有两种方法:
①调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法
参数1 表名称
参数2 跟行列ContentValues类型的键值对Key-Value
参数3 更新条件(where字句)
参数4 更新条件数组
②编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。
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); }
5、查询数据
private void query(SQLiteDatabase db) { //查询获得游标 Cursor cursor = db.query ("usertable",null,null,null,null,null,null); //判断游标是否为空 if(cursor.moveToFirst() { //遍历游标 for(int i=0;i<cursor.getCount();i++){ cursor.move(i); //获得ID int id = cursor.getInt(0); //获得用户名 String username=cursor.getString(1); //获得密码 String password=cursor.getString(2); //输出用户信息 System.out.println(id+":"+sname+":"+snumber); } } }
6、删除指定表
private void drop(SQLiteDatabase db){ //删除表的SQL语句 String sql ="DROP TABLE stu_table"; //执行SQL db.execSQL(sql); }
重要类
1、DBHelper类package lta.commonproject.data.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * @author: lutaian * @ClassName: * @Description: * @date: 2016/7/26 */ public class DBHelper extends SQLiteOpenHelper { public static final String DB_NAME = "lta"; public static final int VERSION = 1; public DBHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log.e("lta","db is creating"); String sql = "create table info(id integer primary key autoincrement,name text,student_num text)"; sqLiteDatabase.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
2、DBManager 类
package lta.commonproject.data.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import java.util.concurrent.atomic.AtomicInteger; /** * @author: lutaian * @ClassName: * @Description: * @date: 2016/7/26 */ public class DBManager { public static DBManager instance; public static DBHelper mDBHelper; private SQLiteDatabase mDB; private AtomicInteger mOpenCounter = new AtomicInteger(); public static synchronized void initialize(Context context,DBHelper dbHelper) { if(instance == null) { instance = new DBManager(); mDBHelper = dbHelper; } } public static synchronized DBManager getInstance() { if(instance == null) { throw new IllegalStateException(DBManager.class.getSimpleName() + " is not initialized, call initialize(..) method first."); } return instance; } public synchronized SQLiteDatabase getWritableDB() { if(mOpenCounter.incrementAndGet() == 1) { // Opening new database mDB = mDBHelper.getWritableDatabase(); } return mDB; } public synchronized SQLiteDatabase getReadableDB() { if(mOpenCounter.incrementAndGet() == 1) { // Opening new database mDB = mDBHelper.getReadableDatabase(); } return mDB; } public synchronized void closeDatabase() { if(mOpenCounter.decrementAndGet() == 0) { // Closing database mDB.close(); } } }
调用
DBHelper dbHelper = new DBHelper(mContext); DBManager.initialize(mContext,dbHelper); DBManager dbManager = DBManager.getInstance(); SQLiteDatabase database = dbManager.getWritableDB(); String sql = "insert into info(name,student_num) values('卢泰桉','890425')"; database.execSQL(sql);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories