sqlite的使用方法汇总

来源:互联网 发布:linux日志查看 编辑:程序博客网 时间:2024/05/10 15:43
首先,说到本地数据持久化存储,都知道有三种,文件存储,SharedPreferences 存储和SQLite数据库存储技术。


三种方式有各自不同的使用场景,简单做下介绍。

①、文件存储
一般定义:是最基本的一种数据存储方式,不对存储的内容进行任何格式化的处理,所有数据都是直接保存到文件中。
适用范围:一些简单的文本数据和二进制数据。

②、SharedPreferences存储
一般定义:为使用键值对的方式来保存存储数据,在保存一个数据的时候就对应一个键,读取的时候就根据键值把保存的数据取出来。
适用范围:键值对的数据形式,支持多种不同的数据类型存储,存储到为什么类型读取出来也是对应的数据类型。

③、SQLite数据库存储
一般定义:此为andriod系统内置的轻量级数据库,速度快占用资源少,只有几百K的内存占用,适用于移动设备上。
适用范围:一般表格类存储类型  一般数据类型 与上比比较轻便。



一般项目中,我是用的sp的存储比较多,由于sql使用的不多,知识也比较杂乱,没用做过总结,再次做一次主要是针对sqlite的总结。

一、使用SQLite数据库创建数据库

其提供了一个SQLiteOpenHelper帮助类,通过此类可以简单的对数据库进行创建和升级。
那么如何使用呢?

(一)SQLiteOpenHelper类是一个抽象类,使用它我们需要创建一个类去继承它:

public class NotesDB extends SQLiteOpenHelper {    //创建数据库 (执行一些创建表的逻辑)    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {            }    //升级数据库    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {    }}
如代码,继承后有两个抽象方法,分别是onCreate()和onUpgrade(),这两个方法分别是创建数据库和
升级数据库的逻辑方法。
我们创建一个名为notes的表为例,看看怎么使用,如下代码为例:
/** * Created by dell on 2016/8/23. * <p/> * 数据存放/data/data/<package name>/databases目录下 */public class NotesDB extends SQLiteOpenHelper {    public static final String TABLE_NAME = "notes";    public static final String CONTENT = "content";    public static final String ID = "_id";    public static final String TIME = "time";    private Context mContext;    // 四个参数依次是context ,数据库名字,自定义的cursor一般为nullversion为版本    public NotesDB(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, "notes", null, 1);        mContext = context;    }    //创建数据库 (执行一些创建表的逻辑)    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        sqLiteDatabase.execSQL(CREATE_NOTES);    }    //升级数据库    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {    }    /**     * 创建notes     */    public static final String CREATE_NOTES = "create table "            + TABLE_NAME + "("            + ID + " integer primary key autoincrement,"            + CONTENT + " text not null,"            + TIME + " text not null)";}

以上都有注释,解释的很清楚,SQLiteOpenHelper有两个构造方法,一般使用参数少一点的那个构造方法
即可,NotesDB构造方法接受四个参数,第一个为Context,必须有他才能进行数据库操作,第二个为数据库名称
,第三个为查询数据的时候自定义的一个返回值,一般为Null,第四个参数为当前数据库的版本号,用于对数据
进行升级操作。构建SQLiteOpenHelper的实例后,在调用getReadableDatabase()或者getWritableDatabase()
方法就可以创建数据库了:
public class NotesMain extends Activity {    private NotesDB notesDb;    private SQLiteDatabase dbWriter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_mainnote);        notesDb = new NotesDB(this, "notes.db", null, 1);        /**         * getWritableDatabase()getReadableDatabase()的解释:         * 两个方法都可以创建或打开一个数据库,         * 如果存在直接打开,否则创建一个新数据库。并返回一个可对数据库进行读写操作的对象。         * 不同的是,当数据库不可写入的时(如磁盘空间已经满了),getReadableDatabase()方法返回         * 的对象以只读的方式打开数据库,而getWritableDatabase()方法则抛出异常。         */        dbWriter = notesDb.getWritableDatabase();        addDB();    }    public void addDB() {        ContentValues cv = new ContentValues();        cv.put(NotesDB.CONTENT, "hello");        cv.put(NotesDB.TIME, getTime());        dbWriter.insert(NotesDB.TABLE_NAME, null, cv);    }    /**     * 获取时间     *     * @return     */    public String getTime() {        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd HH:mm:ss");        Date curDate = new Date();        String str = format.format(curDate);        return str;    }}

关于SQLiteOpenHelper的两个非常重要的实例方法 getWritableDatabase()getReadableDatabase()的解释:
两个方法都可以创建或打开一个数据库,如果存在直接打开,否则创建一个新数据库。并返回一个可对数据库进行读写操作的对象。
不同的是,当数据库不可写入的时(如磁盘空间已经满了),getReadableDatabase()方法返回的对象以只读的方式打开数据库,而getWritableDatabase()方法则抛出异常。
至此,运行手机程序,就可以创建了一个名叫notes的数据库了,那么具体数据库怎么查询,可以通过sqlite3来查询。
二、sqlite查询创建的数据库和表信息。
使用DDMS中FILE explorer找到对应的你的程序下包名称下的数据库是可以看到文件的,但是是查询不到里边的内容的。
导出有时候会出现乱码的现象,那么在此可以使用adnroid的abd shell语言来查询。
adb是android sdk 中自带的一个调试工具,使用这个工具可以直接对连接在电脑上的手机或者模拟器进行调试
操作,他存放在sdk 的platform-tools 目录下,如果想要在命令号中使用需要配置到path变量中,方便使用。
windows配置方法:电脑-属性-高级-环境变量 找到path编辑 将platform-tools目录配置进去即可。
配置完成后 使用语言 adb shell,然后进入你的data/data/com<packagename>/databases,然后用sqlite3 加上数据库名即可打开表。
在使用.table 命令可以查看两张表,其中android_metadata,表示每个数据库中都自动生成的,另一个notes表就是刚才新建的表。此时还
可以用.schema命令查看它的建表语句。
到此就可以证明已经确实生成了notes.db数据库库文件了。
adb shell
打开data/data/com.example.dell.myapplication/databases目录,里边就是数据库
ls查看此目录下的详细文件内容。
sqlite3 打开数据库
.table 查看被打开的数据库中的表

.schema 查看建表语句。


.至此查看验证是否生成数据库和表的操作到此为止。







遇到问题

如果打开DDMS 查看文档,在运行程序的时候可能会出现 

Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled. 

按照其提示的操作Tools -Android -Enable ADB integration ,打勾后就可以运行了。



参考:郭霖第一行代码图书。






0 0