zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    博客园
    未释放的已删除文件
    ssh连接缓慢
    剑指 Offer 38. 字符串的排列
    剑指 Offer 37. 序列化二叉树
    剑指 Offer 50. 第一个只出现一次的字符
    剑指 Offer 36. 二叉搜索树与双向链表
    剑指 Offer 35. 复杂链表的复制
    剑指 Offer 34. 二叉树中和为某一值的路径
    剑指 Offer 33. 二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/prescheng/p/4933377.html
Copyright © 2011-2022 走看看