zoukankan      html  css  js  c++  java
  • 使用 SQLiteOpenHelper 对数据库进行操作

    SQLiteOpenHelper 是android提供的一个帮助类,这个类是抽象的,通过实现这个类,可以帮助开发者实现对SQLITE数据库的创建以及数据库版本管理,使用SQLiteOpenHelper打开数据库如果数据库存在则不创建,如果不存在则创建它(此时执行的是onCreate方法)。

    public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
    第一个参数:Context类型,上下文对象。
    第二个参数:String类型,数据库的名称
    第三个参数:CursorFactory类型
    第四个参数:int类型,数据库版本 

    方法简介:


    getReadableDatabase() SQLiteDatabase 创建或打开一个数据库只读的数据库,可以通过这个方法返回的SQLiteDatabase对象对数据库进行查询操作


    getWritableDatabase() SQLiteDatabase 创建或打开一个可以读写的数据库(如果磁盘空间不足或者权限不足可能会导致执行失败) 可以通过这个方法返回的SQLiteDatabase对象对数据库进行一系列的操作,如新建一个表,插入一条数据等


    onCreate(SQLiteDatabase db) void 第一次创建的时候调用


    onOpen(SQLiteDatabase db) 打开数据库


    onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 升级数据库(升级数据的操作写在这个方法里) 


    close() synchronized void 关闭所有打开的数据库对象 

    例:

     DatabaseHelper类

    package android.sqlite;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    
    /**
     * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能
     * 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
     * 第二,提供了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调用父类当中的构造函数
            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 void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            System.out.println("create a database");
            //execSQL用于执行SQL语句
            db.execSQL("create table user(id int,name varchar(20))");
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub
            System.out.println("upgrade a database");
        }
    }

    Activity代码

    package android.sqlite;
    
    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;
    
    public class SQLiteActivity extends Activity {
        /** Called when the activity is first created. */
        private Button createDatabaseButton = null;
        private Button updateDatabaseButton = null;
        private Button insertButton = null;
        private Button updateButton = null;
        private Button selectButton = null;
        private Button deleteButton = null;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // 根据控件id获得相应的控件对象
            createDatabaseButton = (Button) findViewById(R.id.createDatabase);
            updateDatabaseButton = (Button) findViewById(R.id.updateDatabase);
            insertButton = (Button) findViewById(R.id.insert);
            updateButton = (Button) findViewById(R.id.update);
            selectButton = (Button) findViewById(R.id.select);
            deleteButton = (Button) findViewById(R.id.delete);
            // 为按钮设置监听器
            createDatabaseButton
                    .setOnClickListener(new CreateDatabaseOnClickListener());
            updateDatabaseButton
                    .setOnClickListener(new UpdateDatabaseOnClickListener());
            insertButton.setOnClickListener(new InsertOnClickListener());
            updateButton.setOnClickListener(new UpdateOnClickListener());
            selectButton.setOnClickListener(new SelectOnClickListener());
            deleteButton.setOnClickListener(new DeleteOnClickListener());
        }
    
        // createDatabaseButton点击事件监听器
        class CreateDatabaseOnClickListener implements OnClickListener {
            public void onClick(View v) {
                // 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的
                DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                        "test_yangyz_db");
                // 只有调用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才会创建或打开一个连接
                SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();
            }
        }
    
        // updateDatabaseButton点击事件监听器
        class UpdateDatabaseOnClickListener implements OnClickListener {
            public void onClick(View v) {
                // TODO Auto-generated method stub
                DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                        "test_yangyz_db", 2);
                // 得到一个只读的SQLiteDatabase对象
                SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();
            }
    
        }
    
        // insertButton点击事件监听器
        class InsertOnClickListener implements OnClickListener {
            public void onClick(View v) {
                // 创建ContentValues对象
                ContentValues values = new ContentValues();
                // 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
                values.put("id", 1);
                values.put("name", "yangyz");
                // 创建DatabaseHelper对象
                DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                        "test_yangyz_db", 2);
                // 得到一个可写的SQLiteDatabase对象
                SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
                // 调用insert方法,就可以将数据插入到数据库当中
                // 第一个参数:表名称
                // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值
                // 第三个参数:ContentValues对象
                sqliteDatabase.insert("user", null, values);
            }
        }
    
        // updateButton点击事件监听器
        class UpdateOnClickListener implements OnClickListener {
            public void onClick(View v) {
                // 创建一个DatabaseHelper对象
                DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                        "test_yangyz_db", 2);
                // 得到一个可写的SQLiteDatabase对象
                SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
                // 创建一个ContentValues对象
                ContentValues values = new ContentValues();
                values.put("name", "zhangsan");
                // 调用update方法
                // 第一个参数String:表名
                // 第二个参数ContentValues:ContentValues对象
                // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符
                // 第四个参数String[]:占位符的值
                sqliteDatabase.update("user", values, "id=?", new String[] { "1" });
                System.out.println("-----------update------------");
            }
        }
    
        // selectButton点击事件监听器
        class SelectOnClickListener implements OnClickListener {
            public void onClick(View v) {
                String id = null;
                String name = null;
                //创建DatabaseHelper对象
                DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                        "test_yangyz_db", 2);
                // 得到一个只读的SQLiteDatabase对象
                SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();
                // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象
                // 第一个参数String:表名
                // 第二个参数String[]:要查询的列名
                // 第三个参数String:查询条件
                // 第四个参数String[]:查询条件的参数
                // 第五个参数String:对查询的结果进行分组
                // 第六个参数String:对分组的结果进行限制
                // 第七个参数String:对查询的结果进行排序
                Cursor cursor = sqliteDatabase.query("user", new String[] { "id",
                        "name" }, "id=?", new String[] { "1" }, null, null, null);
                // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false
                while (cursor.moveToNext()) {
                    id = cursor.getString(cursor.getColumnIndex("id"));
                    name = cursor.getString(cursor.getColumnIndex("name"));
                }
                System.out.println("-------------select------------");
                System.out.println("id: "+id);
                System.out.println("name: "+name);
            }
        }
    
        // deleteButton点击事件监听器
        class DeleteOnClickListener implements OnClickListener {
            public void onClick(View v) {
                //创建DatabaseHelper对象
                DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_yangyz_db",2);
                //获得可写的SQLiteDatabase对象
                SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
                //调用SQLiteDatabase对象的delete方法进行删除操作
                //第一个参数String:表名
                //第二个参数String:条件语句
                //第三个参数String[]:条件值
                sqliteDatabase.delete("user", "id=?", new String[]{"1"});
                System.out.println("----------delete----------");
            }
        }
    }

    转自参考:http://byandby.iteye.com/blog/835580

  • 相关阅读:
    动态规划——Best Time to Buy and Sell Stock IV
    动态规划——Split Array Largest Sum
    动态规划——Burst Ballons
    动态规划——Best Time to Buy and Sell Stock III
    动态规划——Edit Distance
    动态规划——Longest Valid Parentheses
    动态规划——Valid Permutations for DI Sequence
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
  • 原文地址:https://www.cnblogs.com/ywtk/p/3799993.html
Copyright © 2011-2022 走看看