android SQLite使用SQLiteOpenHelper类对数据库进行增删查改

一个简单的例子,当点击按钮时进行相应的操作,效果图如下:

项目代码如下:

DatabaseHelper类

package com.example.sqlitedatebasetest; 

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
 * 
* @author 作者 程其春
* @version 创建时间:2015-11-3 上午11:32:55 
* 类说明
* SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本,它提供两个方面的功能
* 第一,getReadableDatebase和getWriteableDatebase 可以获得SQLiteDatebase对象,
* 通过该对象可以对数据库进行操作
* 第二,提供了onCreate(),onUpgrade两个回调函数,允许我们再创建和更新数据库时,可以进行自己的操作
 */
public class DatabaseHelper extends SQLiteOpenHelper{
    
    private static final int VERSION = 1;  
    
    /** 
     * 在SQLiteOpenHelper的子类当中,必须有该构造函数 
     * @param context   上下文对象 
     * @param name      数据库名称 
     * @param factory 
     * @param version   当前数据库的版本,值必须是整数并且是递增的状态 
     */  
    public DatabaseHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }
    
    public DatabaseHelper(Context context,String name,int version){
        this(context,name,null,version);
    }
    
    public DatabaseHelper(Context context, String name){
        this(context,name,VERSION);
    }
    /**
     * 该函数是在第一次创建的时候执行,实际上是第一次得到SQLitedatebase对象的时候才会调用这个方法。
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        System.out.println("create a datebase");
        //execSQL用于执行SQL语句  
        db.execSQL("create table user (id int,name verchar(20))");
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        System.out.println("upgrade a database");
    }

}
 

MainActivity类

package com.example.sqlitedatebasetest;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient.CustomViewCallback;
import android.widget.Button;

public class MainActivity extends ActionBarActivity implements OnClickListener {
    private Button btnCreateDatabase = null;
    private Button btnUpdateDatabase = null;
    private Button btnInsert = null;
    private Button btnUpdate = null;
    private Button btnQuery = null;
    private Button btnDelete = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 根据控件id获得相应的控件对象
        btnCreateDatabase = (Button) this.findViewById(R.id.btn_createDatebase);
        btnUpdateDatabase = (Button) this.findViewById(R.id.btn_updateDatebase);
        btnInsert = (Button) this.findViewById(R.id.btn_insert);
        btnUpdate = (Button) this.findViewById(R.id.btn_update);
        btnQuery = (Button) this.findViewById(R.id.btn_query);
        btnDelete = (Button) this.findViewById(R.id.btn_delete);
        // 为按钮设置监听器
        btnCreateDatabase.setOnClickListener(this);
        btnUpdateDatabase.setOnClickListener(this);
        btnInsert.setOnClickListener(this);
        btnUpdate.setOnClickListener(this);
        btnQuery.setOnClickListener(this);
        btnDelete.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        // btn_createDatebase点击事件监听器
        case R.id.btn_createDatebase:
            // 创建了一个DatebaseHelper对象,只执行这句话是不会创建或打开连接的
            DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this,
                    "test01_db");
            // 只有调用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才会创建或打开一个连接
            SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();
            break;

        // btn_updateDatebase点击事件监听器
        case R.id.btn_updateDatebase:
            DatabaseHelper dbHelper2 = new DatabaseHelper(MainActivity.this,
                    "test01_db", 2);
            // 得到一个只读的SQLiteDatabase对象
            SQLiteDatabase sqLiteDatabase2 = dbHelper2.getReadableDatabase();
            break;

        // btn_insert点击事件监听器
        case R.id.btn_insert:
            // 创建ContentValues对象
            ContentValues values = new ContentValues();
            // 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
            values.put("id", 1);
            values.put("name", "zhangsan");
            // 创建DatabaseHelper对象
            DatabaseHelper dbHelper3 = new DatabaseHelper(MainActivity.this,
                    "test01_db", 2);
            // 得到一个可写的SQLiteDatabase对象
            SQLiteDatabase sqLiteDatabase3 = dbHelper3.getWritableDatabase();
            // 调用insert方法,就可以将数据插入到数据库当中
            // 第一个参数:表名称
            // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值
            // 第三个参数:ContentValues对象
            sqLiteDatabase3.insert("test01_db", null, values);
            break;

        // btn_update点击事件监听器
        case R.id.btn_update:
            // 创建一个DatabaseHelper对象
            DatabaseHelper dbHelper4 = new DatabaseHelper(MainActivity.this,
                    "test01_db", 2);
            // 得到一个可写的SQLiteDatabase对象
            SQLiteDatabase sqliteDatabase4 = dbHelper4.getWritableDatabase();
            // 创建一个ContentValues对象
            ContentValues values2 = new ContentValues();
            values2.put("name", "lisi");
            // 调用update方法
            // 第一个参数String:表名
            // 第二个参数ContentValues:ContentValues对象
            // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符
            // 第四个参数String[]:占位符的值
            sqliteDatabase4.update("user", values2, "id=?",
                    new String[] { "1" });
            System.out.println("-----------update------------");
            break;

        // btn_query点击事件监听器
        case R.id.btn_query:
            String id = null;
            String name = null;
            DatabaseHelper dbHelper5 = new DatabaseHelper(MainActivity.this,
                    "test01_db", 2);
            SQLiteDatabase sqLiteDatabase5 = dbHelper5.getReadableDatabase();
            // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象
            // 第一个参数String:表名
            // 第二个参数String[]:要查询的列名
            // 第三个参数String:查询条件
            // 第四个参数String[]:查询条件的参数
            // 第五个参数String:对查询的结果进行分组
            // 第六个参数String:对分组的结果进行限制
            // 第七个参数String:对查询的结果进行排序
            Cursor cursor = sqLiteDatabase5.query("user", new String[] { "id",
                    "name" }, "id=?", new String[] { "1" }, null, null, null);
            while(cursor.moveToNext()){
                id = cursor.getString(cursor.getColumnIndex("id"));  
                name = cursor.getString(cursor.getColumnIndex("name"));  
            }
            System.out.println("-------------query------------");  
            System.out.println("id: "+id);  
            System.out.println("name: "+name);
            break;

        // btn_delete点击事件监听器
        case R.id.btn_delete:
            //创建DatabaseHelper对象  
            DatabaseHelper dbHelper6 = new DatabaseHelper(MainActivity.this,"test01_db",2);  
            //获得可写的SQLiteDatabase对象  
            SQLiteDatabase sqliteDatabase6 = dbHelper6.getWritableDatabase();  
            //调用SQLiteDatabase对象的delete方法进行删除操作  
            //第一个参数String:表名  
            //第二个参数String:条件语句  
            //第三个参数String[]:条件值  
            sqliteDatabase6.delete("user", "id=?", new String[]{"1"});  
            System.out.println("----------delete----------"); 
            break;
        default:
            break;
        }
    }

}

在虚拟机上运行项目后,如何查看自己已经成功创建了数据表了呢?

可以在eclipse中,选择DDMS,再选择File explorer

找到data/data/自己项目的包名/自己的创建的数据表名

如下图所示:

项目源码已经上传 https://github.com/presCheng/sqliteDatabaseTest.git

原文地址:https://www.cnblogs.com/prescheng/p/4933377.html