SQLiteDatabase浅谈

(一)、简介:
  1. Android经过 SQLite 数据库引擎来实现结构化数据的存储。在一个数据库应用程序中,任何类均可以经过名字对已经建立的数据库进行访问,可是在应用程序以外就不能够。
  2. SQLite 数据库是一种用C语言编写的嵌入式数据库,它是一个轻量级的数据库,最初为嵌入式设计的。它是在一些基础简单的语句处理上要比oracle / mysql快不少,并且其对内存的要求很低,在内存中只须要几百KB的存储空间。这是Android中采用 SQLite 数据库的主要缘由。
  3. SQLite 支持事务处理功能。Transaction
  4. SQLite 处理速度比MySQL等著名的开源数据库系统更快。它没有服务器进程。 
  5. SQLite 经过文件保存数据库,该文件是跨平台的,能够自由复制。一个文件就是一个数据库。数据库名即文件名。
  6. JDBC会消耗太多系统资源,因此JDBC对于手机并不合适,所以Android提供了新的API来使用 SQLite 数据库。
 
3、SQLiteDatabase类:
SQLiteDatabase等同于JDBC中Connection和Statement的结合体。SQLiteDatabase既表明与数据库的链接,又只能用于执行sql语句操做。
(一)、操做 SQLite 数据库的步骤:【重要
一、建立 SQLiteDatabase 对象,它表明与数据库的链接;
二、建立数据库中的表(执行CREATE);
三、调用SQLiteDatabase 对象执行数据库操做(执行DML);
四、对查询后的结果集Cursor进行处理。
 
(二)、操做 SQLite 数据库的步骤详细讲解:
一、建立 SQLite 数据库对象:SQLiteDatabase对象表明一个数据库。 SQLiteDatabase提供了几个静态方法来打开一个文件对应的数据库。
  • static  SQLiteDatabase  openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)
  • static  SQLiteDatabase  openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)
  • static  SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler)
  • static  SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
【备注:】打开数据库的参数:
一、参数中的path表明着数据库的路径(若是是在默认路径/data/data/<package_name>/databases/下,则这里只须要提供数据库名称);
二、factory表明着在建立Cursor对象时,使用的工厂类,若是为null的话,则使用默认的工厂(这里咱们能够实现本身的工厂进行某些数据处理);
三、flags表明的是建立表时的一些权限设置,多个权限之间用|分隔:
  • OPEN_READONLY :表明的是以只读方式打开数据库(常量值为:1)
  • OPEN_READWRITE:表明以读写方式打开数据库(常量值为:0)
  • CREATE_IF_NECESSARY:当数据库不存在时建立数据库
  • NO_LOCALIZED_COLLATORS:打开数据库时,不根据本地化语言对数据库进行排序(常量值为:16)

 

代码:mysql

 

//当数据库存在时:

 

String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "android_manual.db";

 

SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READWRITE);

 

Cursor cursor = db.rawQuery("select * from android_basic order by id desc limit 0 , 15",null);

 


 

//当数据库不存在时:

 

String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";

 

SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);

 

db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");


建立表:
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);

db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";


主意:
一。SQLite的数据类型?
        首先你会接触到一个让你惊讶的名词: Typelessness(无类型)。其实SQLite是无类型的。这意味着你能够保存任何类型的数据到数据库表的任何列中, 不管这列声明的数据类型是什么。对于SQLite来讲对字段不指定类型是彻底有效的。如:create table dict(_id integer primary key autoincrement , word , detail);
       
    注意:这里必定要注意,SQLite数据库在一种状况下是要求类型匹配的,当咱们建表是如create table table1(id integer primary key),sqlite对应一位integer primary key的列值容许你存储64位的整数。必须是INTEGER PRIMARY KEY  AUTOINCREMENT。
        诚然SQLite容许忽略数据类型, 可是仍然建议在你的Create Table语句中指定数据类型. 由于数据类型对于你和其余的程序员交流, 或者你准备换掉你的数据库引擎时能起到一个提示或帮助的做用。

 
 
2、调用SQLiteDatabase 对象的方法执行数据库操做:【重要
  1. execSQL(String sql , Object[] args)    执行带占位符的sql语句(update,insert,delete语句)
  2. rawQuery( String sql , String[] args )   执行带占位符的sql查询(select语句)
  3. beginTransaction()    开始事务
  4. endTransaction()   结束事务
【备注:】除了以上重要的四个方法外,Android考虑到不熟悉sql语句的开发者,提供了进一步封装后的一系列方法。可是如下这几个方法参数众多,平时不建议使用,可是必定也要掌握,在ContentProvider中会有相似的方法,要注意区分。
  1. insert()
  2. update()
  3. delete()
  4. query()
3、对查询结果进行操做。当执行的是select语句,返回一个Cursor对象。Cursor相似于JDBC中的ResultSet结果集,内置移动游标等方法:
  • move(int offset)    按偏移量来移动
  • moveToFirst()   将记录指针移动到第一行
  • moveToLast ()   将记录指针移动到最后一行
  • moveToNext ()      将记录指针移动到下一行
  • moveToPosition(int position)       将记录指针移动到指定的一行
  • moveToPrevious()      将记录指针移动到上一行
  • getCount()    返回Cursor的行数
  • getColumnName(int index)    根据列的索引返回其相应的列名称
  • getColumnIndex(String name)    根据列的名字返回其相应的索引
  • getColumnNames()       返回一个保存有全部列名称的字符串数组
  • getColumnCount()    返回列的总数
  • close()   关闭游标结果集,释放资源
  • getType()    获取字段的数据类型。分别有0、一、二、三、4这几个结果。
    • 0: 表明null
    • 1:表明int
    • 2:表明float
    • 3:表明String
    • 4:表明blob
 
(四)、事务:【重要
        数据库事务(Database Transaction) ,是指做为单个逻辑工做单元执行的一系列操做,要么完整地执行,要么彻底地不执行。事务的目的是为了保证数据的一致性。 
相关文章
相关标签/搜索