设为首页 收藏本站
查看: 837|回复: 0

[经验分享] android SQLite使用SQLiteOpenHelper类对数据库进行操作

[复制链接]

尚未签到

发表于 2016-12-1 07:54:22 | 显示全部楼层 |阅读模式
  SQLiteOpenHelper的使用方法
SQLiteOpenHelper是一个辅助类来管理数据库的创建和版本。
可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。
所有继承了这个类的类都必须实现下面这样的一个构造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
第一个参数:Context类型,上下文对象。
第二个参数:String类型,数据库的名称
第三个参数:CursorFactory类型
第四个参数:int类型,数据库版本
下面是这个类的几个方法:

方法名 返回类型 描述 备注
getReadableDatabase() synchronized SQLiteDatabase 创建或打开一个数据库 可以通过这两个方法返回的SQLiteDatabase对象对数据库进行一系列的操作,如新建一个表,插入一条数据等
getWritableDatabase() synchronized SQLiteDatabase 创建或打开一个可以读写的数据库
onCreate(SQLiteDatabase db) abstract void 第一次创建的时候调用
onOpen(SQLiteDatabase db) void 打开数据库
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升级数据库
close() synchronized void 关闭所有打开的数据库对象
  例子:
DatabaseHelper类:
  package qyq.sqlitetest.db;
  import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
* SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能
* 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
* 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作
*/
public class DatabaseHelper extends SQLiteOpenHelper{
private static final int VERSION = 1;
/** 构造方法,这个构造方法在SQLiteOpenHelper的实现类当中是必须的
* @param context 上下文对象 这里的话也就是Activity了
* @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 synchronized SQLiteDatabase getReadableDatabase() {
// TODO Auto-generated method stub
return super.getReadableDatabase();
}
// 创建或打开一个可以读写的数据库,返回 SQLiteDatabase对象
@Override
public synchronized SQLiteDatabase getWritableDatabase() {
// TODO Auto-generated method stub
return super.getWritableDatabase();
}
// 第一次创建数据库时候执行,第一次得到SQLiteOpenHelper对象的时候,才会调用这个方法
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("onCreate method");
//execSQL用于执行SQL语句,创建数据库表
db.execSQL("create table users (id int,name varchar(50))");

}
  @Override
public void onOpen(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("onOpen method");
super.onOpen(db);
}
  @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("onUpgrade method");

}
  Activity类
  package qyq.sqlitetest;
  import qyq.sqlitetest.db.DatabaseHelper;
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;
import android.widget.EditText;
  public class sqLiteTestActivity extends Activity {
/** Called when the activity is first created. */
// 控件的声明
private Button createDataBase = null;
private Button updateDataBase = null;
private Button insert = null;
private Button update = null;
private Button query = null;
private Button delete =null;
private EditText id = null;
private EditText name = null;
private int inputid = 0;
private String inputname = null;
// 获取控件设置OnClickListener监听器
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createDataBase = (Button)findViewById(R.id.createDataBase);
createDataBase.setOnClickListener(new createDataBaseListener());
updateDataBase=(Button)findViewById(R.id.updateDataBase);
updateDataBase.setOnClickListener(new updateDataBaseListener());
id =(EditText)findViewById(R.id.id);
name = (EditText)findViewById(R.id.name);
insert = (Button)findViewById(R.id.insert);
insert.setOnClickListener(new insertListener());
update =(Button)findViewById(R.id.update);
update.setOnClickListener(new updateListener());
query=(Button)findViewById(R.id.query);
query.setOnClickListener(new queryListener());
delete =(Button)findViewById(R.id.delete);
delete.setOnClickListener(new deleteListener());
System.out.println("test");
}
// 监听器类
class createDataBaseListener implements OnClickListener{
  @Override
public void onClick(View v) {
// 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
// 只有调用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才会创建或打开一个连接
SQLiteDatabase db = helper.getReadableDatabase();
}
}
// 监听器类
class updateDataBaseListener implements OnClickListener{
  @Override
public void onClick(View v) {
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test",2);
SQLiteDatabase db = helper.getWritableDatabase();
}
}
// 监听器类
class insertListener implements OnClickListener{
  @Override
public void onClick(View v) {
// 创建ContentValues对象
ContentValues values = new ContentValues();
// 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致
//Integer.parseInt(id.getText().toString())从画面获取要插入的值
values.put("id",Integer.parseInt(id.getText().toString()));
values.put("name", name.getText().toString());
// 创建DatabaseHelper对象
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
// 得到一个可写的SQLiteDatabase对象
SQLiteDatabase db = helper.getWritableDatabase();
// 调用insert方法,就可以将数据插入到数据库当中
// 第一个参数:表名称
// 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值
// 第三个参数:ContentValues对象
db.insert("users", null, values);
}
}
// 监听器类
class updateListener implements OnClickListener{
  @Override
public void onClick(View v) {
ContentValues values = new ContentValues();
values.put("name", "lisiyuan");
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
SQLiteDatabase db = helper.getWritableDatabase();
String id1 =id.getText().toString();
// 调用update方法
// 第一个参数String:表名
// 第二个参数ContentValues:ContentValues对象
// 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符
// 第四个参数String[]:占位符的值
db.update("users", values, "id=?", new String[]{id1});
}
}
// 监听器类
class queryListener implements OnClickListener{
  @Override
public void onClick(View v) {
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
SQLiteDatabase db = helper.getReadableDatabase();
// 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象
// 第一个参数String:表名
// 第二个参数String[]:要查询的列名
// 第三个参数String:查询条件
// 第四个参数String[]:查询条件的参数
// 第五个参数String:对查询的结果进行分组
// 第六个参数String:对分组的结果进行限制
// 第七个参数String:对查询的结果进行排序
Cursor cs=db.query("users", new String[]{"id","name"}, "id=?", new String[]{"5"}, null, null, null);
// 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false
while(cs.moveToNext()){
System.out.println(cs.getString(cs.getColumnIndex("name")));
}
}
}
// 监听器类
class deleteListener implements OnClickListener{
  @Override
public void onClick(View v) {
DatabaseHelper helper = new DatabaseHelper(sqLiteTestActivity.this,"sqlite_test");
SQLiteDatabase db = helper.getWritableDatabase();
String id1 =id.getText().toString();
//调用SQLiteDatabase对象的delete方法进行删除操作
//第一个参数String:表名
//第二个参数String:where字句,相当于sql语句where后面的语句,?号是占位符
//第三个参数String[]:占位符的值
db.delete("users", "id=?", new String[]{id1});
}
}
}


}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307850-1-1.html 上篇帖子: Android学习之SQLite创建表和增删改 下篇帖子: sqlite数据库处理时间问题 和 日期时间函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表