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 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences存储;第三种就是数据库SQLiteDatabase存储。文件存储我就不用多说了,而SharedPre...
  • meryvn
  • meryvn
  • 2015年09月23日 13:47
  • 3702

Android 操作SQLite基本用法

在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面。本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的。 ...
  • codeeer
  • codeeer
  • 2014年06月12日 12:50
  • 149108

android之存储篇_SQLite数据库_让你彻底学会SQLite的使用

http://blog.csdn.net/jason0539/article/details/10248457 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明...
  • qq_35114086
  • qq_35114086
  • 2016年10月15日 20:29
  • 9158

记录:Android SQLite的使用

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

Android中SQLite数据库介绍和使用

转载请注明出处: SQLite简介        上一篇博文我们学习了Android几种简单的数据存储方式,SharedPreference存储和文件存储(其中又分为外部设备文件存储和内部...
  • yegongheng
  • yegongheng
  • 2014年07月25日 16:45
  • 4993

ANDROID开发之SQLite详解

原文地址:http://www.cnblogs.com/Excellent/archive/2011/11/19/2254888.html
  • harvic880925
  • harvic880925
  • 2014年04月26日 09:48
  • 22213

Android SQLite 简单使用示例

SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。 袖珍型的SQLite可以支持高达2TB大小的数据库,每...
  • a78270528
  • a78270528
  • 2015年08月16日 11:52
  • 1838

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

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

Android如何使用JDBC连接SQLite数据库?

【首先把结论说出来:不到万不得已最好不要使用JDBC操作SQLite数据库】
  • u012719153
  • u012719153
  • 2015年04月07日 19:28
  • 2516

android SQLite要注意的问题

SQL语句的拼接问题: 我们使用数据库的可视化的管理工具中使用SQL语句可以很方便的操作数据库,但是如果我们原封不动的把这些语句搬到android中,我们会发现这样是行不通的。 如果我们使...
  • u010715440
  • u010715440
  • 2015年03月07日 11:24
  • 361
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中SQLite使用总结
举报原因:
原因补充:

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