Android数据储存之SQLiteDatabase SQLiteOpenHelper类的简单使用
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类的简单使用的更多相关文章
- Android数据储存之SQLiteDatabase 简单增删改查
SQLiteDatabase 使用 SQLiteDatabase提供如下方法来打开一个文件对应的数据库: openDatabase(String path, SQLiteDatabase.Cursor ...
- android数据储存之存储方式
能够将数据储存在内置或可移动存储,数据库,网络.sharedpreference. android能够使用Content provider来使你的私有数据暴漏给其它应用程序. 一.sharedpref ...
- Android数据储存之SharedPreferences总结
写在前面:本文是我参考李刚老师的<疯狂Android讲义>以及API所写的读书笔记,在此表示感谢,本人小白,如有错误敬请指教. SharedPreferences的使用背景: 有时候,应用 ...
- android数据储存之应用安装位置
原文地址:http://developer.android.com/guide/topics/data/install-location.html#Compatiblity 从API8開始,你能够将你 ...
- Android数据储存之SharedPreferences
Android中SharedPreferences通常与Editor连用 接口SharedPreferences常用方法: boolean contains(String str):判断SharedP ...
- Android数据储存之File
openFileOutStream 和 openFileInStream FileInputStream fileInputStream = openFileInput(name); 打开应用下文件 ...
- Android之ListView动态添加数据(SQLiteOpenHelper类添加数据)
一.SQLiteOpenHelper类: 这次我们通过sqlite来动态添加数据,接下来我们创建一个openHelper.java,在前面sqlite博客中我们已经详细的讲了SQLite的创建及使用等 ...
- Android下的数据储存方式(三)
Android下最好的数据储存方式:关系型数据库sqlite. 数据库的创建:使用SqliteOpenHelper类 结合SqliteOpenHelper类和SQLiteDatabase类的帮 ...
- Android 里的数据储存
数据持久化 关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类: 本地储存(也称之为数据持久化, ...
随机推荐
- 微信jssdk实现分享到微信
本来用的是这个插件http://overtrue.me/share.js/和百度分享 相同之处:在微信分享的时候,分享的链接都不能获取到缩略图... 不同之处:百度分享在微信低版本是可以看到缩略图的( ...
- HDU3973 线段树 + 字符哈希
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3973 , 线段树 + 字符哈希,好题. 又学了一种新的哈希方法,hhhh~ 解法: 想法是用P进制的数 ...
- 【洛谷2403】[SDOI2010] 所驼门王的宝藏(Tarjan+dfs遍历)
点此看题面 大致题意: 一个由\(R*C\)间矩形宫室组成的宫殿中的\(N\)间宫室里埋藏着宝藏.由一间宫室到达另一间宫室只能通过传送门,且只有埋有宝藏的宫室才有传送门.传送门分为3种,分别可以到达同 ...
- c++连接mysql并提示“无法解析的外部符号 _mysql_server_init@12”解决方法&提示缺少“libmysql.dll”
课程作业要用c++连接mysql server,但是出现些小问题,经查阅资料已经解决,做一下笔记. 环境:vs2017, mysql版本是8.0.16-winx64. 设置项目属性 项目 - C ...
- Drupal7新装一个主题时页面白屏,如何设置一个默认主题?
问题: 请问我不小心退出登陆了 但这个主题没有登录口 而且之前不知道为什么我其他界面都不能显示内容所以 ?q=user 也不行,怎么办呢?看网上说更换默认主题 去variable表里把默认主题换了,我 ...
- 牛客小白月赛5 I 区间 (interval) 【前缀和】
链接:https://www.nowcoder.com/acm/contest/135/I 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次 ...
- c++运算符重载和虚函数
运算符重载与虚函数 单目运算符 接下来都以AClass作为一个类例子介绍 AClass{ int var } 区分后置++与前置++ AClass operator ++ () ++前置 一般设计为返 ...
- (转)为什么在 2013 十月番中出现了很多以 3D 渲染代替传统 2D 绘画来表现人物的镜头?
一直都有的,特别是三次元这家公司一直致力于3d的风格化渲染既大家说的3d转2d.目前最厉害的商业化软件是pencil+,占领大部分的作品.而mentalray,早期用于disney的部分风格化渲染:i ...
- javascript 计算倒计时
function timeDown(second) { var month = '', day = '', hour = '', minute = ''; if (second >= 86400 ...
- lnmp启用pathinfo并隐藏index.php
编辑如下区段: location ~ [^/]\.php(/|$) { # comment try_files $uri =404; to enable pathinfo try_files $uri ...