SQLite的初级研究

1.SQLite是一个轻量级的数据库,体积大小只用几千字节,一些SQL的指令只是部分支持,列如:ALTERTABLE

创建数据库

Context.createDatabase(

      String name,

      int version,

      int mode,

      CursorFactory factory

)

创建一个新的数据库并返回一个SQLiteDatabase对象。

数据库不能被创建,则抛出FIleNotFoundException异常。

 

SQLite存储数据时不需要指定数据类型:SQLite只支持5种数据类型:null(空值)、integer(有符号整数类型)、real(浮点数类型)、text(字符串)、blob(二进制表示)

Create table users(_id integer primary  key autoincrement , name, age)主键建议使用_id

 

 

 

2.使用步骤  (demo)

写个类继承SQLiteOpenHelper然后实现里面的方法。

 

packagecom.sqlitedemo;

importandroid.content.Context;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.database.sqlite.SQLiteDatabase.CursorFactory;

importandroid.database.sqlite.SQLiteOpenHelper;

importandroid.widget.Toast;

 

public classMyDatabaseHelper extends SQLiteOpenHelper{

//创建表的代码

publicstatic final String CREATE_BOOK="create table book ("

            + "id integer primary keyautoincrement,"

            + "author text, "

            + "price real, "

            + "pages integer, "

            + "name text)";

publicstatic final String CREATE_CATEGORY="create table category("

            + "id integer primary keyautoincrement, "

            + "category_name text, "

            + "category_codeinteger)";

 

privateContext context;

 

/**

 * @paramcontext  上下文对象

 * @paramname 数据库名称

 *@param factory用于创建Cursor(结果集)的工程,默认传null即可

 * @paramversion 数据库版本号

 */

publicMyDatabaseHelper(Context context, String name,

CursorFactoryfactory, int version) {

super(context,name, factory, version);

this.context= context;

}

//首次安装和启动清除APP数据库文件后调用

@Override

publicvoid onCreate(SQLiteDatabase db) {

db.execSQL(CREATE_BOOK);

db.execSQL(CREATE_CATEGORY);

Toast.makeText(context, "创建成功", Toast.LENGTH_SHORT).show();

}

//版本升级时,更改了数据库的版本号后调用此方法(升级版本号)

@Override

publicvoid onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

System.out.println("update");

if(oldVersion< newVersion){

db.execSQL("droptable if exists book");

db.execSQL("droptable if exists category");

onCreate(db);

}

}

}

 

 

//使用数据库代码

packagecom.sqlitedemo;

importandroid.app.Activity;

importandroid.content.ContentValues;

importandroid.database.Cursor;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.os.Bundle;

importandroid.view.Menu;

importandroid.view.MenuItem;

importandroid.view.View;

 

public classMainActivity extends Activity {

privateMyDatabaseHelper databaseHelper;

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

databaseHelper = newMyDatabaseHelper(this,"xiaorou.db", null,1);//创建数据库

}

publicvoid create(View view) {

databaseHelper.getWritableDatabase();

}

publicvoid insert(View view) {

SQLiteDatabasedb = databaseHelper.getWritableDatabase();

ContentValuesvalues = new ContentValues();

//开始组装第一条数据

values.put("name","theda vinci code");

values.put("author","bbx");

values.put("pages",500);

values.put("price",19.99);

db.insert("book",null, values);//插入第一条数据

//开始组装第二条数据

values.put("name","thelost symbol");

values.put("author","bbx");

values.put("pages",600);

values.put("price",199.99);

db.replace("book",null, values);//插入第二条数据

}

publicvoid update(View view) {

SQLiteDatabasedb = databaseHelper.getWritableDatabase();

db.execSQL("alter table book rename toLove_book");//修改表名

//                ContentValuesvalues = new ContentValues();

//                values.put("price",99.9);

//                db.update("book",values, "name=?", new String[]{"the da vinci code"});

}

publicvoid delete(View view) {

SQLiteDatabasedb = databaseHelper.getWritableDatabase();

db.delete("book","pages>?", new String[]{"500"});

}

publicvoid query(View view) {

SQLiteDatabasedb = databaseHelper.getWritableDatabase();

Cursorcursor = db.query("book", null, null, null, null, null, null);

if(cursor.moveToFirst()){

do{

//遍历Cursor对象,取出数据并打印

Stringname = cursor.getString(cursor.getColumnIndex("name"));

Stringauthor = cursor.getString(cursor.getColumnIndex("author"));

intpages = cursor.getInt(cursor.getColumnIndex("pages"));

doubleprice = cursor.getDouble(cursor.getColumnIndex("price"));

System.out.println(name+author+pages+price);

}while(cursor.moveToNext());

}

cursor.close();;

}

}

 

3.注意点:SQLite支持大部分标准的SQL语句,增删改查语句都是通用的,分页查询语句和MySQL相同(select* from users limit 10,20/(select * from user limit 20 offset 10)

 

创建对象时,调用getWritableDatabase()或者getReadableDatabase():

情况1:数据库文件不存在,创建文件,打开数据库连接(得到SQLiteDatabase对象),执行                              

                onCreate()方法。

情况2:数据库文件存在,版本号没变,打开数据库连接

情况3:数据库文件存在,版本号升级,升级数据库,打开数据连接,执行onUpgrade()方法。

情况4:数据库文件存在,版本号降低,执行onDowngrade()方法,方法在4.0会默认抛出一个

              异常。

getWritableDatabase()getReadableDatabase()区别:getReadableDatabase()通常情况下返回的就是getWritableDatabase()拿到的数据库,只有在抛出异常时拿到的数据库为只读的。

在做增删改时,使用getWritableDatabase()。在做查询时。使用getReadableDatabase()

 

 

4.安卓中的单元测试

1.添加:<instrumentation android:name ="android.test.InstrumentationTestRunner"  androidtargerPackage="要测试的包名"></instrumentation>

2.添加:<application>子节点下:

<uses-libraryandroid:name="android.test.runner"/>

3.自定义类继承AndroidTestCase

 

 

5.研究SQLiteOpenHelper

实际项目中很少使用SQLiteDatabase的方法来打开数据库,都是继承SQLiteOpenHelper开发子类

并通过该子类的getReadableDatabase()getWritableDatabase()方法发开数据库。

 

SQLiteOpenHelperAndroid提供的一个管理数据库的工具类。方法有如下:

getReadableDatabase():以读写的方式打开数据库对应的SQLiteDatabase对象。

getWritableDatabase():以写的方式打开数据库对应的SQLiteDatabase对象。

onCreate():第一次创建数据库的时候回调该方法。

onUpgrade():当数据库版本更新时回调该方法。

Close():关闭所有打开的SQLiteDatabase

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值