Android中SQLite使用总结

来源:互联网 发布:南京招聘网络写手 编辑:程序博客网 时间:2024/05/17 08:24

简介

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);
0 0
原创粉丝点击