在Android中,对于数据的存贮,有几种方式,有文件方式,有文件式数据库方式,Android自带了一个SQLite数据库,做嵌入开发的人对这个跨平台的本地文件数据库一定不会陌生,在Android对于数据的访问,提出了新的方式,ContentProvider方式,类似于MS的ContentProvider方式的,OLEDB,及ODBC统一的数据方式。
我们首先来看看SQLite在 Android中的使用,在Android中有最简单的使用方式,就是利Context对象的openorCreateDatabase
我们来看看一段代码:
package test.DB;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class DBActivity extends Activity {
private SQLiteDatabase mdb = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initDatabase();
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
menu.add(1, Menu.FIRST +1, 1, "GetName");
menu.add(1, Menu.FIRST +2, 2, "Test");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
super.onOptionsItemSelected(item);
switch (item.getItemId())
{
case Menu.FIRST+ 1:
{
TextView tv = (TextView)this.findViewById(R.id.view_main);
tv.setText(this.getName());
break;
}
case Menu.FIRST + 2:
{
this.setTitle("Del Item...");
break;
}
}
return true;
}
private void initDatabase()
{
mdb = this.openOrCreateDatabase("dbfile", 0, null);
String sql_create = "create table test (id int, name TEXT)";
mdb.execSQL(sql_create);
String sql_insert = "insert into test(id, name) values(3, 'name3')";
mdb.execSQL(sql_insert);
}
private String getName()
{
String name = null;
Cursor cur = mdb.rawQuery("select * from test", null);
cur.moveToFirst();
while (!cur.isLast())
{
name = name + cur.getString(1)+ "\r\n";
cur.moveToNext();
}
return name;
}
}
我们再来看看单独使用SQLiteOpenHelper方式:
先由SQLiteOpenHelper继承一个数据库操作类,其中onCreate, onUpgrade必须重载并实现,
package test.DB;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public DatabaseHelper(Context ct,String dbName)
{
super(ct,dbName,null,1);
}
public boolean insert(String insert)
{
this.getWritableDatabase().execSQL(insert);
return true;
}
public boolean update(String update)
{
this.getWritableDatabase().execSQL(update);
return true;
}
public boolean delete(String del)
{
this.getWritableDatabase().execSQL(del);
return true;
}
public Cursor query(String query)
{
Cursor cur = this.getReadableDatabase().rawQuery(query, null);
return cur;
}
}
再创建一个使用者(消费者)
package test.DB;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class DBActivity extends Activity {
private SQLiteDatabase mdb = null;
private DatabaseHelper helper = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initDatabase();
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
menu.add(1, Menu.FIRST +1, 1, "GetName");
menu.add(1, Menu.FIRST +2, 2, "Test");
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
super.onOptionsItemSelected(item);
switch (item.getItemId())
{
case Menu.FIRST+ 1:
{
TextView tv = (TextView)this.findViewById(R.id.view_main);
tv.setText(this.getName());
break;
}
case Menu.FIRST + 2:
{
this.setTitle("Del Item...");
break;
}
}
return true;
}
private void initDatabase()
{
helper = new DatabaseHelper(this,"dbfile");
//mdb = this.openOrCreateDatabase("dbfile", 0, null);
//String sql_create = "create table test (id int, name TEXT)";
//mdb.execSQL(sql_create);
String sql_insert = "insert into test(id, name) values(55, 'namexx')";
//mdb.execSQL(sql_insert);
helper.insert(sql_insert);
}
private String getName()
{
String name = null;
//mdb = helper.getReadableDatabase();
Cursor cur = helper.query("select * from test");
cur.moveToFirst();
do
{
name = name + cur.getString(1)+ "\n";
} while(cur.moveToNext());
return name;
}
}
这些代码读起来是不是有点Visual Basic的感觉?呵呵,所以,以后说不定.net,Android,java,blackberry,最终都成为一致的API,当然,这只是我们的期望,这样大家不必整天花这么多时间学这些无聊的接口了。
好了,该我们的ContentProvider出场了,与Service,BroadcastReceiver等组件一样,继承特定的Interface,在AndroidManifest.xml里声明这个ContentProvider,调用者就可以拿来使用了。
首先我们定义一个ContentProvider:
package test.DB;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.widget.Toast;
public class TestProvider extends ContentProvider {
private DatabaseHelper mdbHelper = null;
final static String TABLE_NAME = "test";
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
mdbHelper.getWritableDatabase().delete(TABLE_NAME, arg1, arg2);
return 0;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
mdbHelper.getWritableDatabase().insert(TABLE_NAME, "", values);
return null;
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
mdbHelper = new DatabaseHelper(this.getContext(), "dbfile");
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Cursor cur = mdbHelper.getReadableDatabase().query(TABLE_NAME,projection,selection,null,null,null, null);
Toast.makeText(this.getContext(), "test Cur!", Toast.LENGTH_SHORT);
return cur;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
mdbHelper.getWritableDatabase().update(TABLE_NAME, values, selection, null);
return 0;
}
}
老规矩,AndroidManifest.xml来定义这个Provider
<provider android:label="test_provider" android:authorities="com.my.provider" android:name="TestProvider">
</provider>
这里的android:authorities = "com.my.provider"是标识这个ContentProvider,调用者可以根据这个标识来找到它,
我们组合一个能找到它的Uri,
public class ProviderConst {
public static final Uri MY_TEST_URI = Uri.parse("content://com.my.provider/test");
}
content 指的是内容提供者ContentProvider。
//com.my.provider映射到我们已定义的那个ContentProvider标识
/test这个作为一个参数,传给ContentProvider,可以根据这个参数来决定操作目标,比如数据库中的哪张表,文件中的那一部分数据等。
我们来操作这个内容提供者:
private String getName()
{
String name = null;
Cursor cur = this.getContentResolver().query(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);
if (cur == null)
return null;
cur.moveToFirst();
do
{
name = name + cur.getString(1)+ "\n";
} while(cur.moveToNext());
return name;
}
我们也可以这样使用:
private String getName()
{
String name = null;
Cursor cur = this.managedQuery(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);
if (cur == null)
return null;
cur.moveToFirst();
do
{
name = name + cur.getString(1)+ "\n";
} while(cur.moveToNext());
return name;
}
简单的使用方法我们已了解,那么,我们来分析一下复杂的内容。
分享到:
相关推荐
因为数据库的操作在开发中的重要性是不言而喻的,所以,在数据库这一方面下了很大的功夫,终于掌握了基本的操作,包括建表和删除,对数据库的操作,“增删改查”基本操作,而且用了封装性来实现,是学习数据库的一个...
Android 数据库SQLiteDatabase的使用 1.数据库辅助操作接口SQLiteDatabaseOpenHelper的使用 2.ContentValues的使用 3.数据的增删改查 4.listView 与Adapter的使用 5.OptionsMenu的使用 6.Editext隐藏失去焦点的方法
Android使用SQLiteDatabase直接存取数据与图像。 开发环境:XP3+Eclipse+Android2.2+JDK6.0 测试环境:Android2.2,5寸屏,分辨率640X480
android开发sqliteDataBase使用实例
这是android的SQLiteDatabase的CRUD小案例,做了一些关于android连接SQLiteDabase的基础案例
今天我们讲讲在android studio中利用数据库存储中的SQLiteOpenHelper()方法建立数据库 SQLiteOpenHelper中需要重载函数: onCreate( ):利用SQL语句,在系统中创建数据库(表)功能 onUpgrade( ):利用SQL语句,在...
********************************************** 通过SQLiteDatabase实现自定义ContentProvider增删改查 *********************************************
今天我们讲讲在android studio中利用数据库存储中的SQLiteOpenHelper()方法建立数据库 SQLiteOpenH elper中需要重载函数: onCreate( ):利用SQL语句,在系统中创建数据库(表)功能 onUpgrade( ):利用SQL语句,...
本文实例讲述了Android开发之Sqliteopenhelper用法。分享给大家供大家参考。具体分析如下: 如果在安卓开发中,直接使用Activity中的openOrCreateDatabase(name, mode, factory)会有一系列跟随的问题。比如说数据库...
在android studio中用SQLiteOpenHelper()方法建立数据库 注:这篇文章是承接上面发的链接的文章,有什么问题欢迎讨论 用SQLiteOpenHelper()方法创建表结构可以用onCreat()函数和onUpgrade()函数 一.用...
主要以一个简单的实例为大家详细讲解Android中SQLiteDatabase使用方法,感兴趣的小伙伴们可以参考一下
实现了安卓移动应用开发中数据库的所有基本功能,完整直观实现了一个数据库的应用。
Android SQLiteDatabase的使用详解
SQLiteDatabase SQLiteOpenHelper Cursor query() insert() update()
import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; import android....
SQLiteOpenHelper重点在于helper,他是SQLiteDatabase的一个帮助类,便于开发者实现对SQLite的数据进行写入(增删改)和读取(查询)。 2. SQLiteOpenHelper具体有什么方法? 使用SQLiteOpenHelper,便是构建一个类...
一个小例子,操作 android SQLitedatabase
SQLiteDatabase,SQLiteOpenHelper,ContentProvider,ContentResolver,ContentObserver,ContentObserverable的使用简单使用。
Android 四大件组件之一ContentProvider demo案例,下载即可运行学习。存储数据使用系统自带的数据库SQLIteOpenHelper,自定义ContentProvider,通过ContentResolver访问ContentProvider,实现数据新增、查找、删除...