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

  • 相关阅读:
    jqGrid api 中文说明
    jsp + js + 前端弹出框
    js中关于带数字类型参数传参丢失首位数字0问题
    java中WGS84坐标(ios)转换BD-09坐标(百度坐标)
    Java中的“浅复制”与“深复制”
    Git错误:error:failed to push some refs to 'git@gitee.com:name/project.git'
    git操作教程
    线程调度及进程调度
    同步锁Lock
    多线程案例
  • 原文地址:https://www.cnblogs.com/prescheng/p/4933377.html
Copyright © 2011-2022 走看看