1.创建数据库
- public class DatabaseHelper extends SQLiteOpenHelper {
-
/*** * 数据库的版本必须大于0,否则报错: * java.lang.RuntimeException: Unable to start activity * ComponentInfo{com.example.test_20131218/ * com.example.test_20131218.MainActivity}: java.lang.IllegalArgumentException: Version must be >= 1, was 0 */
- private static final String DB_NAME = "mydata.db"; //数据库名称
- private static final int version = 1; //数据库版本
- public DatabaseHelper(Context context) {
- super(context, DB_NAME, null, version);
- // TODO Auto-generated constructor stub
- }
- @Override
- public void onCreate(SQLiteDatabase db) {
-
/** * 这个方法 * 1、在第一次打开数据库的时候才会走 * 2、在清除数据之后再次运行-->打开数据库,这个方法会走 * 3、没有清除数据,不会走这个方法 * 4、数据库升级的时候这个方法不会走 */
- String sql = "create table if not existsuser(name varchar(20) not null , password varchar(60) not null );";
- db.execSQL(sql);
- }
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-
/** * 1、第一次创建数据库的时候,这个方法不会走 * 2、清除数据后再次运行(相当于第一次创建)这个方法不会走 * 3、数据库已经存在,而且版本升高的时候,这个方法才会调用 */
- }
- }
2.数据库操作
DatabaseHelper DatabaseHelper
dbHelper = new DatabaseHelper(this)// this:为activity即可
SQLiteDatabase
db = dbHelper.getWritableDatabase()
//插入
db.execSQL("INSERT INTO user
VALUES (?, ?)", new Object[]{name,
password});
//查询
Cursor c = db.rawQuery("SELECT * FROM user WHERE name
= ?", new String[]{"呵呵"});
while(c.moveToNext()){
String name = c.getString(c.getColumnIndex("name"));
}
c.close();
//删除
db.execSQL("delete
from user where name=?",new String[]{"呵呵"});
//修改
db.execSQL("update user set name=?",new String[]{"呵呵"});
以上操作都是跟sql语句有关的,对于没有学过sql的也可以通过sqlite提供的其他方法进行操作,这里就不多说了
3.数据库升级
随着应用不断升级,原有的数据库结构可能已经不再适应新的功能,这个时候,就需要对SQLite数据库的结构进行升级。SQLite提供了
alert table 命令,允许用户重新命名或添加新的字段到已有表中,但是不能从表中删除字段。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//为什么要在方法里写for循环,主要是考虑到夸版本升级,比如有的用户一直不升级版本,数据库版本号一直是1,而客户端最新版本其实对应的数据//库版本已经是4了,那么我中途可能对数据库做了很多修改,通过这个for循环,可以迭代升级,不会发生错误.
for(int
i = oldVersoion;i<=newVersion;i++){
switch(i){
case
2: // 相应的操作
......
......
//再次调用onCreate方法
onCreate(db);
break;
case
3:// 相应的操作
break;
}
}
}
升级完成后,数据库会自动存储最新的版本号为当前数据库版本号。
4.sqlite优化:
1:使用原始的sql语句效率更高,这就是我上面为什么用sql语句的原因
2:对于增删改操作,可以加上事务
db.beginTransaction();
//此处做操作
db.setTransactionSuccessful();
db.endTransaction();
3:where 条件的时候带上“?” 来编译查询 ,同时可以防止sql注入