SQLiteOpenHelper 简介:

SQLiteOpenHelper是一个借口!所以不能直接实例化!那我们想要得到SQLiteOpenHelper对象就需要实现该接口!创建该接口的实现类对象!

该对象中有如下常用方法:

getReadableDatabase()   打开或创建数据库,返回一个SQLiteDatabase对象;

getWritableDatabase()    打开或创建数据库,返回一个SQLiteDatabase对象;

getReadableDatabase() 与 getWritableDatabase() 它的区别:

使用getReadableDatabase() 获取SQLiteDatabase对象时如果该数据库不可以写入时(如磁盘空间已满)getReadableDatabase()方法返回的SQLiteDatabase对象时只可以读取该数据库中的数据

而方法getReadableDatabase()则会出现异常

abstract void

  onCreate(SQLiteDatabase db)

该方法是第一次创建数据库的时候才会调用!如果程序中已经有该数据库,该方法则不会被再次调用!通常表的初始化会写在该方法中!

abstract void

  onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

该方法是当数据库版本更新的时候会被调用!在创建数据库的时候我们会设置一个数据库的版本!如果该数据库的版本有改动则就会调用该方法!

synchronized void

  close()

该方法关闭数据库!

String getDatabaseName()

获取数据库名称!

自定义我们自己的SQLiteOpenHelper

 public class MySqliteHelper extends SQLiteOpenHelper {
private static String My_sql;
private Context context;
public MySqliteHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, null, version);
this.context = context;
} @Override
public void onCreate(SQLiteDatabase db) {
My_sql = "CREATE TABLE MYTABLE (_ID INTEGER PRIMARY KEY,_NAME,_AGE,_ADDRESS)";
db.execSQL(My_sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Toast.makeText(context, "旧版本:"+oldVersion+",新版本"+newVersion, 0).show();
} }

使用MySqliteHelper 操作数据库:

 public class MainActivity extends Activity implements OnClickListener{
private Button btnQuery,btnUpdate,btnAdd,btnDelete;
private MySqliteHelper mySqliteHelper;
private int version = 2;
private SQLiteDatabase database;
private ContentValues contentValues;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setEvent();
} private void setEvent() {
btnQuery.setOnClickListener(this);
btnUpdate.setOnClickListener(this);
btnAdd.setOnClickListener(this);
btnDelete.setOnClickListener(this);
} private void initView() {
btnAdd = (Button) this.findViewById(R.id.id_databaseButtonAdd);
btnDelete = (Button) this.findViewById(R.id.id_databaseButtonDelete);
btnQuery = (Button) this.findViewById(R.id.id_databaseButtonQuery);
btnUpdate = (Button) this.findViewById(R.id.id_databaseButtonUpdate);
mySqliteHelper = new MySqliteHelper(this, "MySqlite.db", null, version);//创建数据库
database = mySqliteHelper.getReadableDatabase();//打开数据库返回SQLiteDatabase对象
contentValues = new ContentValues();
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_databaseButtonAdd:
contentValues.clear();
contentValues.put("_NAME","QQ");
contentValues.put("_AGE","15");
contentValues.put("_ADDRESS","NO");
database.insert("MYTABLE", null, contentValues);
break;
case R.id.id_databaseButtonQuery:
Cursor cursor = database.query("MYTABLE", null, null, null, null, null, null);
while (cursor.moveToNext()) {
String name =cursor.getString(cursor.getColumnIndex("_NAME"));
String id =cursor.getString(cursor.getColumnIndex("_ID"));
String age =cursor.getString(cursor.getColumnIndex("_AGE"));
String address =cursor.getString(cursor.getColumnIndex("_ADDRESS"));
Toast.makeText(this,id+"|"+name+"|"+age+"|"+address, 0).show();
}
break;
case R.id.id_databaseButtonDelete:
//与上一篇同样的操作
break;
case R.id.id_databaseButtonUpdate:
//与上一篇同样的操作
break; default:
break;
}
} }

XML文件:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <Button
android:id="@+id/id_databaseButtonAdd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加数据" /> <Button
android:id="@+id/id_databaseButtonUpdate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改数据" /> <Button
android:id="@+id/id_databaseButtonDelete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除数据" /> <Button
android:id="@+id/id_databaseButtonQuery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询数据" />
</LinearLayout>

Android数据储存之SQLiteDatabase SQLiteOpenHelper类的简单使用的更多相关文章

  1. Android数据储存之SQLiteDatabase 简单增删改查

    SQLiteDatabase 使用 SQLiteDatabase提供如下方法来打开一个文件对应的数据库: openDatabase(String path, SQLiteDatabase.Cursor ...

  2. android数据储存之存储方式

    能够将数据储存在内置或可移动存储,数据库,网络.sharedpreference. android能够使用Content provider来使你的私有数据暴漏给其它应用程序. 一.sharedpref ...

  3. Android数据储存之SharedPreferences总结

    写在前面:本文是我参考李刚老师的<疯狂Android讲义>以及API所写的读书笔记,在此表示感谢,本人小白,如有错误敬请指教. SharedPreferences的使用背景: 有时候,应用 ...

  4. android数据储存之应用安装位置

    原文地址:http://developer.android.com/guide/topics/data/install-location.html#Compatiblity 从API8開始,你能够将你 ...

  5. Android数据储存之SharedPreferences

    Android中SharedPreferences通常与Editor连用 接口SharedPreferences常用方法: boolean contains(String str):判断SharedP ...

  6. Android数据储存之File

    openFileOutStream 和 openFileInStream FileInputStream fileInputStream = openFileInput(name);  打开应用下文件 ...

  7. Android之ListView动态添加数据(SQLiteOpenHelper类添加数据)

    一.SQLiteOpenHelper类: 这次我们通过sqlite来动态添加数据,接下来我们创建一个openHelper.java,在前面sqlite博客中我们已经详细的讲了SQLite的创建及使用等 ...

  8. Android下的数据储存方式(三)

      Android下最好的数据储存方式:关系型数据库sqlite.   数据库的创建:使用SqliteOpenHelper类 结合SqliteOpenHelper类和SQLiteDatabase类的帮 ...

  9. Android 里的数据储存

    数据持久化 关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类: 本地储存(也称之为数据持久化, ...

随机推荐

  1. 使用Window Media Player网页播放器

    近段时间在做一个IETM的项目,项目需要使用WebBrower对包含avi的xml进行显示,可avi的显示总是有问题,网上找到这段在html中播放avi的代码,在Win10上表现不错,明天上班用Win ...

  2. Atom打造轻量化C/C++ IDE

    写在前面 近期沉迷Atom的颜值无法自拔,在github的光环下,Atom凭借自身良好的素质,获得了大量开发者的青睐.随之而来的就是丰富的插件库,在插件帮助下,它对各种编程语言都有相当好的支持.对与一 ...

  3. Aizu 0525 Osenbei(状压+贪心)

    题意:翻煎饼,只能横着翻或者竖着翻.问最多有多少朝上? 行只有10,所以枚举一下2^10的状态,每列取0或1中最大的一个. 在枚举外面把饼翻好,枚举里面指针指一下就好.(位运算或bitset乱搞 #i ...

  4. C++之RAII惯用法

    http://blog.csdn.net/hunter8777/article/details/6327704 C++中的RAII全称是“Resource acquisition is initial ...

  5. 【洛谷4424】[HNOI/AHOI2018] 寻宝游戏(位运算思维题)

    点此看题面 大致题意: 给你\(n\)个\(m\)位二进制数.每组询问给你一个\(m\)位二进制数,要求你从\(0\)开始,依次对于这\(n\)个数进行\(and\)或\(or\)操作,问有多少种方案 ...

  6. 【洛谷2577】[ZJOI2005] 午餐(较水DP)

    点此看题面 大致题意: 有\(N\)个学生去食堂打饭,每个学生有两个属性:打饭时间\(a_i\)和吃饭时间\(b_i\).现要求将这些学生分成两队分别打饭,求最早何时所有人吃完饭. 贪心 首先,依据贪 ...

  7. python_38_try-except异常处理语句及raise的使用

    # i=10 # print(30/(i-10)) # #程序将会出现以下报错信息 # # Traceback (most recent call last): # # File "C:/U ...

  8. C# 理解FileInfo类的Open()方法

    我们在对文件进行读写操作之前必须打开文件,FileInfo类为我们提供了一个Open()方法,该方法包含了两个枚举类型值的参数,一个为FileMode枚举类型值,另一个为FileAccess枚举类型值 ...

  9. 更改yum网易、阿里云的yum源

    更改yum源为网易的. 首先备份/etc/yum.repos.d/CentOS-Base.repomv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos ...

  10. mysql update 多表关联更新

    UPDATE new_schedules_spider_static_schedule s join new_scac_port p on p.`PORT` = s.`PORT` and p.SCAC ...