sqlite基本用法

本文介绍了如何使用SQLiteOpenHelper创建数据库并实现基本的CRUD操作,包括数据库升级过程及优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建数据库

  1. public class DatabaseHelper extends SQLiteOpenHelper {  
  2.    
    /***
      * 数据库的版本必须大于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
      */
  3.     private static final String DB_NAME = "mydata.db"//数据库名称  
  4.     private static final int version = 1//数据库版本  
  5.        
  6.     public DatabaseHelper(Context context) {  
  7.         super(context, DB_NAME, null, version);  
  8.         // TODO Auto-generated constructor stub  
  9.     }  
  10.    
  11.     @Override  
  12.     public void onCreate(SQLiteDatabase db) {  
  13. 	 /**
              * 这个方法
              * 1、在第一次打开数据库的时候才会走
              * 2、在清除数据之后再次运行-->打开数据库,这个方法会走
              * 3、没有清除数据,不会走这个方法
              * 4、数据库升级的时候这个方法不会走
              */

  14.         String sql = "create table if not existsuser(name varchar(20) not null , password varchar(60) not null );";            
  15.         db.execSQL(sql);  
  16.     }  
  17.    
  18.     @Override  
  19.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  20. 	/**
              * 1、第一次创建数据库的时候,这个方法不会走
              * 2、清除数据后再次运行(相当于第一次创建)这个方法不会走
              * 3、数据库已经存在,而且版本升高的时候,这个方法才会调用
              */
  21.     }  
  22.    
  23. }  
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注入


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值