zoukankan      html  css  js  c++  java
  • [Android]SqliteOpenHelper抽象类实现SQL_DB的管理

    1. 代码

    MainActivity.java

     package home.lee.sqliteopenhelper; 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 MainActivity extends Activity implements OnClickListener{ private int version = 1; private Button updateDBBtn; private Button createDBBtn; private Button insertBtn; private Button updateBtn; private Button selectBtn; private Button deleteBtn; private SQLiteDatabase sqliteDB; private DBOpenHelper dbOpenHelper; private ContentValues contentValues; private String id = null; private String name = null; private Cursor cursor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createDBBtn = (Button)findViewById(R.id.createDB); updateDBBtn = (Button)findViewById(R.id.updateDB); insertBtn = (Button)findViewById(R.id.insert); deleteBtn = (Button)findViewById(R.id.delete); updateBtn = (Button)findViewById(R.id.update); selectBtn = (Button)findViewById(R.id.select); createDBBtn.setOnClickListener(this); updateDBBtn.setOnClickListener(this); insertBtn.setOnClickListener(this); deleteBtn.setOnClickListener(this); updateBtn.setOnClickListener(this); selectBtn.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.createDB: // 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的 dbOpenHelper = new DBOpenHelper(MainActivity.this, "test.db", 1); // 只有调用了DatabaseHelper的getWritableDatabase()方法 // 或者getReadableDatabase()方法之后,才会创建或打开一个连接 sqliteDB = dbOpenHelper.getReadableDatabase(); System.out.println("=======Create DB " + version + " ver.======="); break; case R.id.updateDB: version++; dbOpenHelper = new DBOpenHelper(MainActivity.this, "test.db", version); // 得到一个只读的SQLiteDatabase对象 sqliteDB = dbOpenHelper.getReadableDatabase(); System.out.println("=======Update DB " + version + " ver.======="); break; case R.id.insert://增 contentValues = new ContentValues(); contentValues.put("id", 1); contentValues.put("name", "Lee"); dbOpenHelper = new DBOpenHelper(MainActivity.this, "test.db", version); sqliteDB = dbOpenHelper.getWritableDatabase(); // 调用insert方法,就可以将数据插入到数据库当中 // 第一个参数:表名称 // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值 // 第三个参数:ContentValues对象 sqliteDB.insert("person", null, contentValues); System.out.println("=============insert " + version + " ver.============="); break; case R.id.delete://删 dbOpenHelper = new DBOpenHelper(MainActivity.this, "test.db", version); sqliteDB = dbOpenHelper.getWritableDatabase(); //调用SQLiteDatabase对象的delete方法进行删除操作 //第一个参数String:表名 //第二个参数String:条件语句 //第三个参数String[]:条件值 sqliteDB.delete("person", "id=?", new String[]{"1"}); System.out.println("=============delete " + version + " ver.============="); break; case R.id.update://改 contentValues = new ContentValues(); contentValues.put("name", "Ray"); dbOpenHelper = new DBOpenHelper(MainActivity.this, "test.db", version); sqliteDB = dbOpenHelper.getWritableDatabase(); // 调用update方法 // 第一个参数String:表名 // 第二个参数ContentValues:ContentValues对象 // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符 // 第四个参数String[]:占位符的值 sqliteDB.update("person", contentValues, "id=?", new String[]{"1"}); System.out.println("=============update " + version + " ver.============="); break; case R.id.select://查 dbOpenHelper = new DBOpenHelper(MainActivity.this, "test.db", version); sqliteDB = dbOpenHelper.getReadableDatabase(); // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象 // 第一个参数String:表名 // 第二个参数String[]:要查询的列名 // 第三个参数String:查询条件 // 第四个参数String[]:查询条件的参数 // 第五个参数String:对查询的结果进行分组 // 第六个参数String:对分组的结果进行限制 // 第七个参数String:对查询的结果进行排序 cursor = sqliteDB.query("person", 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("id:" + id + ",name:" + name); } System.out.println("=============select " + version + " ver.============="); break; default: break; } } } 

    DBOpenHelper.java

     /** * * 一、 SQLite介绍 * SQLite是android内置的一个很小的关系型数据库。 * SQLite的官网是http://www.sqlite.org/,可以去下载一些文档或相关信息。 * 博客中有一篇有稍微详细一点的介绍,大家可以去看一下。 * * 二、 SQLiteOpenHelper的使用方法 * SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。 * 可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。 * 所有继承了这个类的类都必须实现下面这样的一个构造方法: * public DatabaseHelper(Context context, String name, CursorFactory factory, int version) * 第一个参数:Context类型,上下文对象。 * 第二个参数:String类型,数据库的名称 * 第三个参数:CursorFactory类型 * 第四个参数:int类型,数据库版本 * * 下面是这个类的几个方法: * 方法名 返回类型 描述 备注 * getReadableDatabase() synchronized SQLiteDatabase 创建或打开一个数据库 可以通过这两个方法返回的SQLiteDatabase对象对数据库进行一系列的操作,如新建一个表,插入一条数据等 * getWritableDatabase() synchronized SQLiteDatabase 创建或打开一个可以读写的数据库 * onreate(SQLiteDatabase db) abstract void 第一次创建的时候调用 * onOpen(SQLiteDatabase db) void 打开数据库 * onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升级数据库 * close() synchronized void 关闭所有打开的数据库对象 * * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能 * 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作 * 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作 * * */ package home.lee.sqliteopenhelper; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context, String name, int version) { this(context, name, null, version); } public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) {//第一次创建数据库时调用-第一次得到SQLiteDatabase对象的时候才会调用这个方法 System.out.println("Create a database!"); //execSQL用于执行SQL语句 db.execSQL("CREATE TABLE person(id int, name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {//版本号变更时调用 System.out.println("Upgrade a database!"); } } 

    2. 效果
    代码下载

  • 相关阅读:
    2015531 网络攻防 Exp1 PC平台逆向破解(5)M
    2017-2018-1 20155331 嵌入式C语言
    20155330 《网络对抗》 Exp9 web安全基础实践
    20155330 《网络对抗》 Exp8 Web基础
    20155330 《网络对抗》 Exp7 网络欺诈防范
    20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
    20155330 《网络对抗》 Exp5 MSF基础应用
    20155330 《网络攻防》 Exp4 恶意代码分析
    20155330 《网络攻防》 Exp3 免杀原理与实践
    20155330 《网络对抗》 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/webapplee/p/3771782.html
Copyright © 2011-2022 走看看