- 浏览: 1688810 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (159)
- android 2D (13)
- android 控件 (12)
- android UI (16)
- android 动画 (5)
- android 线程 (3)
- android 数据存储 (15)
- android 基础 (13)
- android xml解析 (1)
- android 多媒体开发 (4)
- android 服务 (4)
- android 安全 (1)
- android WebKit以及相关 (3)
- android 电话 (2)
- android 首选项 (5)
- java基础 (16)
- java 多线程 (1)
- java IO (7)
- android工具使用篇 (1)
- android素材资源区 (1)
- android教程资源区 (1)
- java_android异常记录 (5)
- android问题记录 (1)
- android 推荐资源 (1)
- android 源码篇 (3)
- android SDK (2)
- Google Map For Android (2)
- android 项目问题 (2)
- git (0)
- android API 变化 (1)
- MyEclipse (2)
- Swing组件 (1)
- 活法 (0)
- 其它 (2)
- linux (7)
- 菜鸟的java学习笔记 (0)
- 网络 (0)
- 健康 (1)
- Eclipse在Ubuntu下无法双击启动解决办法 (1)
最新评论
-
tydyz:
引用
android SQLiteOpenHelper使用示例 -
tydyz:
[color=red][/color]
android SQLiteOpenHelper使用示例 -
tydyz:
[flash=200,200][flash=200,200][ ...
android SQLiteOpenHelper使用示例 -
梁家大丫头:
写的还不错,不过不是我需要的。
android 理解和使用自定义权限 -
love_java_cc:
牛逼,太齐全了,收藏
MyEclipse 快捷键大全
一、 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 创建或打开一个可以读写的数据库
onCreate(SQLiteDatabase db) abstract void 第一次创建的时候调用
onOpen(SQLiteDatabase db) void 打开数据库
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升级数据库
close() synchronized void 关闭所有打开的数据库对象
下面有一个例子,当点击按钮时进行相应的操作,效果图如下:
介于代码中有详细备注了,在此我就不多写了,直接贴代码了,代码如下:
DatabaseHelper类:
Activity类:
布局文件:
String文件:
项目源码已上传,有需要的可下载。
在实例化DatabaseHelper对象时. 可以写成
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_yangyz_db",null, 2);
第三个参数表示 创建Cursor的工厂类。参数是为了可以自定义Cursor创建。
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 创建或打开一个可以读写的数据库
onCreate(SQLiteDatabase db) abstract void 第一次创建的时候调用
onOpen(SQLiteDatabase db) void 打开数据库
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升级数据库
close() synchronized void 关闭所有打开的数据库对象
下面有一个例子,当点击按钮时进行相应的操作,效果图如下:
介于代码中有详细备注了,在此我就不多写了,直接贴代码了,代码如下:
DatabaseHelper类:
package android.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能 * 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作 * 第二,提供了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调用父类当中的构造函数 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 void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub System.out.println("create a database"); //execSQL用于执行SQL语句 db.execSQL("create table user(id int,name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub System.out.println("upgrade a database"); } }
Activity类:
package android.sqlite; 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 SQLiteActivity extends Activity { /** Called when the activity is first created. */ private Button createDatabaseButton = null; private Button updateDatabaseButton = null; private Button insertButton = null; private Button updateButton = null; private Button selectButton = null; private Button deleteButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 根据控件id获得相应的控件对象 createDatabaseButton = (Button) findViewById(R.id.createDatabase); updateDatabaseButton = (Button) findViewById(R.id.updateDatabase); insertButton = (Button) findViewById(R.id.insert); updateButton = (Button) findViewById(R.id.update); selectButton = (Button) findViewById(R.id.select); deleteButton = (Button) findViewById(R.id.delete); // 为按钮设置监听器 createDatabaseButton .setOnClickListener(new CreateDatabaseOnClickListener()); updateDatabaseButton .setOnClickListener(new UpdateDatabaseOnClickListener()); insertButton.setOnClickListener(new InsertOnClickListener()); updateButton.setOnClickListener(new UpdateOnClickListener()); selectButton.setOnClickListener(new SelectOnClickListener()); deleteButton.setOnClickListener(new DeleteOnClickListener()); } // createDatabaseButton点击事件监听器 class CreateDatabaseOnClickListener implements OnClickListener { public void onClick(View v) { // 创建了一个DatabaseHelper对象,只执行这句话是不会创建或打开连接的 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db"); // 只有调用了DatabaseHelper的getWritableDatabase()方法或者getReadableDatabase()方法之后,才会创建或打开一个连接 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); } } // updateDatabaseButton点击事件监听器 class UpdateDatabaseOnClickListener implements OnClickListener { public void onClick(View v) { // TODO Auto-generated method stub DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一个只读的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); } } // insertButton点击事件监听器 class InsertOnClickListener implements OnClickListener { public void onClick(View v) { // 创建ContentValues对象 ContentValues values = new ContentValues(); // 向该对象中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 values.put("id", 1); values.put("name", "yangyz"); // 创建DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一个可写的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 调用insert方法,就可以将数据插入到数据库当中 // 第一个参数:表名称 // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值 // 第三个参数:ContentValues对象 sqliteDatabase.insert("user", null, values); } } // updateButton点击事件监听器 class UpdateOnClickListener implements OnClickListener { public void onClick(View v) { // 创建一个DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一个可写的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); // 创建一个ContentValues对象 ContentValues values = new ContentValues(); values.put("name", "zhangsan"); // 调用update方法 // 第一个参数String:表名 // 第二个参数ContentValues:ContentValues对象 // 第三个参数String:where字句,相当于sql语句where后面的语句,?号是占位符 // 第四个参数String[]:占位符的值 sqliteDatabase.update("user", values, "id=?", new String[] { "1" }); System.out.println("-----------update------------"); } } // selectButton点击事件监听器 class SelectOnClickListener implements OnClickListener { public void onClick(View v) { String id = null; String name = null; //创建DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, "test_yangyz_db", 2); // 得到一个只读的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); // 调用SQLiteDatabase对象的query方法进行查询,返回一个Cursor对象:由数据库查询返回的结果集对象 // 第一个参数String:表名 // 第二个参数String[]:要查询的列名 // 第三个参数String:查询条件 // 第四个参数String[]:查询条件的参数 // 第五个参数String:对查询的结果进行分组 // 第六个参数String:对分组的结果进行限制 // 第七个参数String:对查询的结果进行排序 Cursor cursor = sqliteDatabase.query("user", new String[] { "id", "name" }, "id=?", new String[] { "1" }, null, null, null); // 将光标移动到下一行,从而判断该结果集是否还有下一条数据,如果有则返回true,没有则返回false while (cursor.moveToNext()) { id = cursor.getString(cursor.getColumnIndex("id")); name = cursor.getString(cursor.getColumnIndex("name")); } System.out.println("-------------select------------"); System.out.println("id: "+id); System.out.println("name: "+name); } } // deleteButton点击事件监听器 class DeleteOnClickListener implements OnClickListener { public void onClick(View v) { //创建DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_yangyz_db",2); //获得可写的SQLiteDatabase对象 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); //调用SQLiteDatabase对象的delete方法进行删除操作 //第一个参数String:表名 //第二个参数String:条件语句 //第三个参数String[]:条件值 sqliteDatabase.delete("user", "id=?", new String[]{"1"}); System.out.println("----------delete----------"); } } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/createDatabase" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/createDatabaseButton" /> <Button android:id="@+id/updateDatabase" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/updateDatabaseButton" /> <Button android:id="@+id/insert" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/insertButton" /> <Button android:id="@+id/update" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/updateButton" /> <Button android:id="@+id/select" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/selectButton" /> <Button android:id="@+id/delete" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/deleteButton" /> </LinearLayout>
String文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, SQLiteActivity!</string> <string name="app_name">SQLiteTest</string> <string name="createDatabaseButton">createDatabase</string> <string name="updateDatabaseButton">updateDatabase</string> <string name="insertButton">insert</string> <string name="updateButton">update</string> <string name="selectButton">select</string> <string name="deleteButton">delete</string> </resources>
项目源码已上传,有需要的可下载。
评论
16 楼
xubuhang
2014-11-23
第二次点击createDatabase出现错误:android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1,是什么原因呢?
15 楼
huigegood
2014-08-28
lz,请问为什么,每次操作都要重新创建一个数据库实例对象?
14 楼
huigegood
2014-08-28
引用
引用
引用
13 楼
u013623223
2014-06-14
非常好, !! 赞一个!!
12 楼
take
2013-08-15
xumen 写道
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
这个构造函数什么时候调用的啊?求解...
int version) {
这个构造函数什么时候调用的啊?求解...
在实例化DatabaseHelper对象时. 可以写成
DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_yangyz_db",null, 2);
第三个参数表示 创建Cursor的工厂类。参数是为了可以自定义Cursor创建。
11 楼
xumen
2013-07-30
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
这个构造函数什么时候调用的啊?求解...
int version) {
这个构造函数什么时候调用的啊?求解...
10 楼
longlongggg
2013-02-23
不错的,感谢
9 楼
mikite
2013-02-05
写的很好,谢谢博主
8 楼
xiedingpeng
2013-01-21
[align=right][align=center][align=center][align=right][align=center][align=left]
[/align][/align][/align][/align][/align][/align]
7 楼
太容易
2013-01-15
6 楼
jameszhu688
2013-01-14
mark,学习完毕,很好!
5 楼
laibinhua
2013-01-07
已下载,读子贴,很不错,简单易懂,就是没有将数据输出显示在gridview或textview的方式!如果有就更好了!
4 楼
feng19872
2012-10-18
mark
3 楼
lorrycat
2012-05-15
想问下,这个db创建在项目下的哪个目录里呢?能制定目录创建吗?
2 楼
endual
2012-04-15
mars ?
1 楼
ldjan
2011-08-30
发表评论
-
android LiveFolder(活动文件夹) 完全解析
2011-05-20 23:12 5303如果大家对 ContentP ... -
android Preferences使用示例二
2010-12-09 14:54 16756Preperences 是一种应用程序内部轻量级的 ... -
android 自定义 Content Provider示例
2010-12-09 13:04 18544我们大家都知道 ... -
android SQLiteOpenHelper使用示例
2010-12-08 01:08 50917我们大家都知道Android平台提供给我们一个数据库辅 ... -
android Content Provider的使用
2010-12-07 23:31 5646Content Provider 属于A ... -
android 读取Resources 和 Assets 中的文件
2010-12-07 15:50 33571在Android平台下,除了对应用程序的私有文件夹中的 ... -
android 私有文件夹 文件的写入与读取
2010-12-07 15:05 19852在介绍如何在Android平台下进行文件的读取之前, ... -
android SQLite数据库基本操作示例
2010-12-06 23:36 21188这个例子实现了一个完整的数据库操作示例。首先运行项 ... -
android SQLite编程详解
2010-12-05 18:51 8290SQLite 数据库功能非常强大,使用起来也非常方便 ... -
android SQLite简介
2010-12-05 00:05 2752一些概念性的东西 ... -
android 数据存储之 Network
2010-12-04 23:03 3410这篇文章演示2 ... -
android 数据存储之 Files
2010-12-04 18:43 3057Android中可以在设备本身的存储设备或者外接的 ... -
android 数据存储之 Shared Preferences
2010-12-04 12:22 7348Shared Preferences类似于我们常 ... -
android 数据存储初探
2010-12-04 00:02 1829一些概念性的 ...
相关推荐
对Android数据库SQlite的基本操作,打开或新建数据库,增,删,改,查。 SQLiteOpenHelper类的运用。 ListView的运用和适配器的使用。 Menu键的使用。
Android为了操作SQlite数据库,提供了SQLiteDatabase类,其内封装了insert 、delete、update 、query 、执行SQL命令等操作。同时又为SQLiteDatabase提供了一个辅助类,SQLiteOpenHelper。它提供了两个重要的方法,...
安卓里常用的存储有方法中少不了数据库的使用,主要是对单表的操作,多表的操作此处不涉及。 每次使用数据库都会有繁琐的代码要写,大致思路是继承自SQLiteOpenHelper写一个数据库操作子类,然后重写onCreate方法,写...
android项目添加数据库,利用SQLiteOpenHelper创建数据库文件的Demo
今天我们讲讲在android studio中利用数据库存储中的SQLiteOpenHelper()方法建立数据库 SQLiteOpenHelper中需要重载函数: onCreate( ):利用SQL语句,在系统中创建数据库(表)功能 onUpgrade( ):利用SQL语句,在...
对于这样的问题,解决的办法就是keep single sqlite connection,保持单个SqliteOpenHelper实例,同时对所有数据库操作的方法添加synchronized关键字。完美解决sqlite的 database locked 或者是 error 5: database ...
android数据库使用真的很不错 SQLiteOpenHelper 创建数据库和数据库版本管理的辅助类。这是一个抽象类,所以我们一般都有一个SQLiteOpenHelper子类,需要继承实现 • void onCreate(SQLiteDatabase db) 在数据库第...
1.建立DbHelper类: ...import android.database.sqlite.SQLiteOpenHelper; public class DbHelper extends SQLiteOpenHelper { public DbHelper(Context context, String name, CursorFactory factory,
update完整操作实例创建SQLiteOpenHelper类创建数据库调用和操作类与DatabaseButtonActivity 相关联的XML文件运行效果结语 SQLite数据库 简介 SQLite数据库是开源嵌入式数据库,支持的数据库大小为2TB. SQLite
ndroid SQLite 数据库详细...因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版本进行管理来实现前面提出的需求。
使用SQLite时,继承SQLiteOpenHelper, onCreate方法只有在第一次创建数据库的时候才会被调用, 因此,重新更改或者添加表时,需要在DDMS里面删掉原来的.db文件,重新运行,就可以~ 补充知识:Android studio ...
这个代码合适初学者使用 使用android 嵌入式sqlite数据库SQLiteOpenHelper进行增删查改的几种写法。包括数据库的事务的使用技巧。很多的注释,合适初学进进行学习使用。
android之利用SQLite数据库实现登陆和注册,使用SQLiteOpenHelper抽象类建立数据库,建立数据库类DatabaseHelper,写业务类实现查询和插入
SuperDB,演示使用SQLiteOpenHelper继承子类操作数据库例子,演示数据库的增删查等操作。
大家好,个人觉得用Sqlite数据库时,经常需要进行机械性的CRUD操作,故对其进行了一下封装,希望能起到抛砖引玉的作用。 目的:封装共有的CRUD 下面简单的说一下使用步骤,如果觉得多余,可以无视。 1. 实现自己...
提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 A、 在SQLiteOpenHelper的子类当中,必须要有的构造函数 B、该函数是在第一次创建数据库的时候执行,实际上是在第一次得到...
android SQLite SQLiteOpenHelper 数据库
Android提供了SqliteOpenHelper类,加入Java的锁机制以便调用。但在C#中未提供类似功能。 作者利用读写锁(ReaderWriterLock),达到了多线程安全访问的目标。 using System; using System.Collections.Generic; ...
使用SQLiteOpenHelper类操作数据库是官方提供的一个官方帮助类