Android中SQLite使用总结

简介

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值