Android中SQLite使用总结

原创 2016年07月26日 11:46:32

简介

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);

Android SQLite 使用总结

前面部分参考自:Android中SQLite应用详解 通常使用方法: //打开或创建数据库 SQLiteDatabase db=openOrCreateDatabase("test...
  • yzr1183739890
  • yzr1183739890
  • 2015-10-18 21:13:22
  • 1679

Android学习笔记----SQLite数据库基本用法

数据库 Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper 帮助类,借助这个类就可以非常简单地对数据库进行创建和升级 SQLiteOpenHe...
  • a946898963
  • a946898963
  • 2016-03-03 19:27:59
  • 1080

Android使用SQLite数据库

一. 简介 SQLite数据库是一个轻量级的DBMS(数据库管理系统)。SQLite使用单个文件存储数据,Android标准库包含SQLite库以及配套使用的一些Java辅助类。主要特点:轻...
  • zhe_ge_sha_shou
  • zhe_ge_sha_shou
  • 2017-01-21 00:57:48
  • 580

android studio sqlite一个基本操作

public class DB extends SQLiteOpenHelper { public DB(Context context) { super(context, "...
  • sdsfs443
  • sdsfs443
  • 2016-08-07 20:16:40
  • 953

Android中SQLite使用示例

Android中SQLite使用示例
  • Gaugamela
  • Gaugamela
  • 2017-02-21 10:27:54
  • 642

在Android应用中使用SQLite数据库(传智播客视频笔记)

在Android应用中使用SQLite数据库 应用生成的数据库文件保存为/data/data/应用包名/databases/name.db,生成的文件可用SQLite Expert打开 (name...
  • ssun125
  • ssun125
  • 2012-05-31 21:54:37
  • 1349

记录:Android SQLite的使用

记录一下Android 在使用 SQLite的时候,增、删、改、查对应的sql语句和Android自身封装还的函数。使用 SQLite时需要注意在 activity 销毁时候把SQLite close...
  • guyuelin123
  • guyuelin123
  • 2017-03-10 10:35:38
  • 1818

在 Android 应用程序中使用 SQLite 数据库以及怎么用

在 Android 应用程序中使用 SQLite 数据库以及怎么用....如果你想要开发 Android 应用程序,一定需要在 Android 上存储数据,使用 SQLite 数据库是一种非常好的选择...
  • zhuangyalei
  • zhuangyalei
  • 2014-07-24 11:26:46
  • 2689

多个activity直接如何Sqlite中的数据

建立一个公共类,返回数据库操作类的对象,然后所有的activity都可以使用这个对象。   import android.content.Context; import android.datab...
  • hxy19971101
  • hxy19971101
  • 2017-07-08 17:47:08
  • 211

Android Studio SQLite数据库应用(一)

Android Studio SQLite数据库应用(一) 版本:Android Studio 1.5.1 创建数据库 升级数据库 CRUD数据操作 SQLite (英语发音:/ˌ...
  • qq_22797039
  • qq_22797039
  • 2016-07-14 00:10:30
  • 27534
收藏助手
不良信息举报
您举报文章:Android中SQLite使用总结
举报原因:
原因补充:

(最多只允许输入30个字)