android SQLite使用SQLiteOpenHelper类对数据库进行操作

SQLiteOpenHelper的使用方法
SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。
可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。
所有继承了这个类的类都必须实现下面这样的一个构造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
第一个参数:Context类型,上下文对象。
第二个参数:String类型,数据库的名称
第三个参数:CursorFactory类型
第四个参数:int类型,数据库版本
下面是这个类的几个方法:

方法名 返回类型 描述 备注
getReadableDatabase() synchronized SQLiteDatabase 创建或打开一个数据库 可以通过这两个方法返回的SQLiteDatabase对象对数据库进行一系列的操作,如新建一个表,插入一条数据等
getWritableDatabase() synchronized SQLiteDatabase 创建或打开一个可以读写的数据库
onCreate(SQLiteDatabase db) abstract void 第一次创建的时候调用
onOpen(SQLiteDatabase db) void 打开数据库
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升级数据库
close() synchronized void 关闭所有打开的数据库对象

 

 

例子:
DatabaseHelper类:

package qyq.sqlitetest.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
 * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能 
 * 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作 
 * 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作 
 */
public class DatabaseHelper extends SQLiteOpenHelper{
 private static final int VERSION = 1;
 /** 构造方法,这个构造方法在SQLiteOpenHelper的实现类当中是必须的
 * @param context   上下文对象  这里的话也就是Activity了
    * @param name      数据库名称 
    * @param factory 
    * @param version   当前数据库的版本,值必须是整数并且是递增的状态
    */
 public DatabaseHelper(Context context, String name, CursorFactory factory,
   int version) {
  //必须通过super调用父类当中的构造函数
  super(context, name, factory, version);
 }
 // 构造方法
 public DatabaseHelper(Context context, String name, int version) {
  this(context, name, null,version);
 }
 // 构造方法
 public DatabaseHelper(Context context, String name) {
  this(context, name,VERSION);
 }
 // 创建或打开一个可以只读的数据库,返回 SQLiteDatabase对象
 @Override
 public synchronized SQLiteDatabase getReadableDatabase() {
  // TODO Auto-generated method stub
  return super.getReadableDatabase();
 }
 // 创建或打开一个可以读写的数据库,返回 SQLiteDatabase对象
 @Override
 public synchronized SQLiteDatabase getWritableDatabase() {
  // TODO Auto-generated method stub
  return super.getWritableDatabase();
 }
 // 第一次创建数据库时候执行,第一次得到SQLiteOpenHelper对象的时候,才会调用这个方法
 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  System.out.println("onCreate method");
  //execSQL用于执行SQL语句,创建数据库表
  db.execSQL("create table users (id int,name varchar(50))");
  
 }

 @Override
 public void onOpen(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  System.out.println("onOpen method");
  super.onOpen(db);
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  System.out.println("onUpgrade method");
  
 }

 

Activity类

 

package qyq.sqlitetest;

import qyq.sqlitetest.db.DatabaseHelper;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class sqLiteTestActivity extends Activity {
    /** Called when the activity is first created. */
 // 控件的声明
 private Button createDataBase = null;
 private Button updateDataBase = null;
 private Button insert = null;
 private Button update = null;
 private Button query = null;
 private Button delete =null;
 private EditText id = null;
 private EditText name = null;
 private int inputid = 0;
 private String inputname = null;
 // 获取控件设置OnClickListener监听器
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        createDataBase = (Button)findViewById(R.id.createDataBase);
        createDataBase.setOnClickListener(new createDataBaseListener());
        updateDataBase=(Button)findViewById(R.id.updateDataBase);
        updateDataBase.setOnClickListener(new updateDataBaseListener());
        id =(EditText)findViewById(R.id.id);
        name = (EditText)findViewById(R.id.name);
        insert = (Button)findViewById(R.id.insert);
        insert.setOnClickListener(new insertListener());
        update =(Button)findViewById(R.id.update);
        update.setOnClickListener(new updateListener());
        query=(Button)findViewById(R.id.query);
        query.setOnClickListener(new queryListener());
        delete =(Button)findViewById(R.id.delete);
        delete.setOnClickListener(new deleteListener());
        System.out.println("test");
    }
    // 监听器类
    class createDataBaseListener implements OnClickListener{

  @Override
  public void onClick(View v) {
   // 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的
   DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
    // 只有调用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才会创建或打开一个连接
   SQLiteDatabase db = helper.getReadableDatabase();
  }
    }
    // 监听器类
    class updateDataBaseListener implements OnClickListener{

  @Override
  public void onClick(View v) {
   DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test",2);
   SQLiteDatabase db = helper.getWritableDatabase();
  }
    }
    // 监听器类
    class insertListener implements OnClickListener{

  @Override
  public void onClick(View v) {
   // 创建ContentValues对象
   ContentValues values = new ContentValues();
   // 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致  
   //Integer.parseInt(id.getText().toString())从画面获取要插入的值
   values.put("id",Integer.parseInt(id.getText().toString()));
   values.put("name", name.getText().toString());
   // 创建DatabaseHelper对象
   DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
   // 得到一个可写的SQLiteDatabase对象
   SQLiteDatabase db = helper.getWritableDatabase();
   // 调用insert方法,就可以将数据插入到数据库当中  
            // 第一个参数:表名称  
            // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值  
            // 第三个参数:ContentValues对象
   db.insert("users", null, values);  
  }
    }
    // 监听器类
    class updateListener implements OnClickListener{

  @Override
  public void onClick(View v) {
   ContentValues values = new ContentValues();
   values.put("name", "lisiyuan");
   DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
   SQLiteDatabase db = helper.getWritableDatabase();
   String id1 =id.getText().toString();
   // 调用update方法  
            // 第一个参数String:表名  
            // 第二个参数ContentValues:ContentValues对象  
            // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符  
            // 第四个参数String[]:占位符的值
   db.update("users", values, "id=?", new String[]{id1});
  }
    }
    // 监听器类
    class queryListener implements OnClickListener{

  @Override
  public void onClick(View v) {
   DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
   SQLiteDatabase db = helper.getReadableDatabase();
   // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象  
            // 第一个参数String:表名  
            // 第二个参数String[]:要查询的列名  
            // 第三个参数String:查询条件  
            // 第四个参数String[]:查询条件的参数  
            // 第五个参数String:对查询的结果进行分组  
            // 第六个参数String:对分组的结果进行限制  
            // 第七个参数String:对查询的结果进行排序
   Cursor cs=db.query("users", new String[]{"id","name"}, "id=?", new String[]{"5"}, null, null, null);
   // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false  
   while(cs.moveToNext()){
    System.out.println(cs.getString(cs.getColumnIndex("name")));
   }
  }
    }
    // 监听器类
    class deleteListener implements OnClickListener{

  @Override
  public void onClick(View v) {
   DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
   SQLiteDatabase db = helper.getWritableDatabase();
   String id1 =id.getText().toString();
   //调用SQLiteDatabase对象的delete方法进行删除操作  
            //第一个参数String:表名  
            //第二个参数String:where字句,相当于sql语句where后面的语句,?号是占位符  
            //第三个参数String[]:占位符的值
   db.delete("users", "id=?", new String[]{id1});
  }
    }
}

 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值