- 浏览: 120021 次
- 性别:
- 来自: 成都
文章分类
在数据库中保存了三个字段:id,name,url
首先实现数据库的操作类:代码如下
然后实现一个ContentProvider
贴上Manifest.xml,在其中添加provider字段
测试直接操作数据库:
首先实现数据库的操作类:代码如下
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; public class DatabaseHelper extends SQLiteOpenHelper { public static final int COLUMN_ID = 1; public static final int COLUMN_INDEX = 0; public static final int COLUMN_NAME = 2; public static final int COLUMN_URL = 3; public static final String ID_STRING = "id"; private static DatabaseHelper mDatabaseHelper = null; public static final String NAME = "mydatabase.db"; public static final String TABLE_NAME = "web_broadcast"; private static final int VERSION = 1; public static DatabaseHelper getDatabaseHelper(Context context) { if (mDatabaseHelper == null) { mDatabaseHelper = new DatabaseHelper(context); } return mDatabaseHelper; } private String TABLE_BROADCAST = "name"; private String TABLE_ID = ID_STRING; private String TABLE_INDEX = "index_num"; private String TABLE_URL = "url"; // private String TABLE_NUM="_num"; // private String TABLE_DATA="_data"; private DatabaseHelper(Context context) { super(context, NAME, null, VERSION); // TODO Auto-generated constructor stub } /** * /** 删除记录 * * */ public void delete(String index) { SQLiteDatabase db = getWritableDatabase(); db.delete(TABLE_NAME, "index_num=?", new String[] { index }); } /** * 添加数据 */ public long insert(String id, String name, String url) { SQLiteDatabase db = getWritableDatabase();// 获取可写SQLiteDatabase对象 // ContentValues类似map,存入的是键值对 ContentValues contentValues = new ContentValues(); contentValues.put(TABLE_ID, id); contentValues.put(TABLE_BROADCAST, name); contentValues.put(TABLE_URL, url); return db.insert(TABLE_NAME, null, contentValues); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String sql = "CREATE TABLE " + TABLE_NAME + "(" + TABLE_INDEX + " INTEGER PRIMARY KEY AUTOINCREMENT," + TABLE_ID + " text," + TABLE_BROADCAST + " text," + TABLE_URL + " text)"; // String sql = "CREATE TABLE " // + TABLE_NAME // + "(_idnum INTEGER PRIMARY KEY AUTOINCREMENT,_num text,_data text)"; db.execSQL(sql);// 需要异常捕获 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub String sql = "drop table " + TABLE_NAME; db.execSQL(sql); onCreate(db); } public Cursor query(String selection) { SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME, null, selection, null, null, null, "index_num desc"); return cursor; } /** * 查询所有数据 * * @return Cursor */ public Cursor select() { SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME, new String[] { "index_num", TABLE_ID, TABLE_BROADCAST, TABLE_URL }, null, null, null, null, "index_num desc"); // desc 降序排列,asc 升序排列 return cursor; } /** * 更新记录的,跟插入的很像 */ public void update(String index, String id, String name, String url) { SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(TABLE_ID, id); contentValues.put(TABLE_BROADCAST, name); contentValues.put(TABLE_URL, url); db.update(TABLE_NAME, contentValues, "index_num=?", new String[] { index }); } }
然后实现一个ContentProvider
package com.tcl.kang; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; import android.util.Log; public class MyContentProvider extends ContentProvider { public static final String PROVIDER_NAME = "com.tcl.myprovider"; public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/urls"); public static final String _ID = DatabaseHelper.ID_STRING; private static final int URLS = 1; private static final int URL_ID = 2; private static final UriMatcher uriMatcher; private static final String DATABASE_TABLE = DatabaseHelper.TABLE_NAME; private SQLiteDatabase mDb; private DatabaseHelper mDbHelper; static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); // 返回所有的 uriMatcher.addURI(PROVIDER_NAME, "urls", URLS); // 返回指定的 uriMatcher.addURI(PROVIDER_NAME, "urls/#", URL_ID); } @Override public boolean onCreate() { Context context = getContext(); mDbHelper = DatabaseHelper.getDatabaseHelper(context); Log.v("", "kang:mdb="+mDb); return (mDb == null) ? false : true; } @Override public String getType(Uri uri) { switch (uriMatcher.match(uri)) { // ---get all books--- case URLS: return "vnd.android.cursor.dir/vnd.learn2develop.urls "; // ---get a particular book--- case URL_ID: return "vnd.android.cursor.item/vnd.learn2develop.urls "; default: throw new IllegalArgumentException("Unsupported URI: " + uri); } } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder(); sqlBuilder.setTables(DATABASE_TABLE); mDb = mDbHelper.getWritableDatabase(); if (uriMatcher.match(uri) == URL_ID) // ---if getting a particular book--- sqlBuilder.appendWhere(_ID + " = " + uri.getPathSegments().get(1)); Cursor c = sqlBuilder.query(mDb, projection, selection, selectionArgs, null, null, sortOrder); // ---register to watch a content URI for changes--- c.setNotificationUri(getContext().getContentResolver(), uri); return c; } @Override public Uri insert(Uri uri, ContentValues values) { mDb = mDbHelper.getReadableDatabase(); long rowID = mDb.insert(DATABASE_TABLE, "", values); // ---if added successfully--- if (rowID > 0) { Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID); getContext().getContentResolver().notifyChange(_uri, null); return _uri; } throw new SQLException("Failed to insert row into " + uri); } @Override public int delete(Uri arg0, String arg1, String[] arg2) { mDb = mDbHelper.getWritableDatabase(); int count = 0; switch (uriMatcher.match(arg0)) { case URLS: count = mDb.delete(DATABASE_TABLE, arg1, arg2); break; case URL_ID: String id = arg0.getPathSegments().get(1); count = mDb.delete(DATABASE_TABLE, _ID + " = " + id + (!TextUtils.isEmpty(arg1) ? " AND (" + arg1 + ')' : ""), arg2); break; default: throw new IllegalArgumentException("Unknown URI " + arg0); } getContext().getContentResolver().notifyChange(arg0, null); return count; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { mDb = mDbHelper.getWritableDatabase(); int count = 0; switch (uriMatcher.match(uri)) { case URLS: count = mDb.update( DATABASE_TABLE, values, selection, selectionArgs); break; case URL_ID: count = mDb.update( DATABASE_TABLE, values, _ID + " = " + uri.getPathSegments().get(1) + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs); break; default: throw new IllegalArgumentException( "Unknown URI " + uri); } getContext().getContentResolver().notifyChange(uri, null); return count; } }
贴上Manifest.xml,在其中添加provider字段
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tcl.kang" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ActivityMain" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:name="com.tcl.kang.MyContentProvider" android:authorities="com.tcl.myprovider" android:multiprocess="true" /> </application> <uses-sdk android:minSdkVersion="8" /> </manifest>
测试直接操作数据库:
package com.tcl.kang; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; public class ActivityMain extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DatabaseHelper databaseHelper = DatabaseHelper.getDatabaseHelper(this); databaseHelper.insert("1", "name1", "http://name1"); databaseHelper.insert("2", "name2", "http://name2"); databaseHelper.close(); } } 测试用ContentProvider操作数据库
package com.tcl.testsql2;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;
public class TestSql2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri uri = Uri.parse("content://"+ "com.tcl.myprovider" + "/urls");
ContentResolver resolver = getContentResolver();
ContentValues values = new ContentValues();
// values.put("id", "5");
// values.put("name", "name5");
// values.put("url", "http://name5");
// resolver.insert(uri, values);
Cursor cursor = resolver.query(uri, null, null, null, null);
}
}
发表评论
-
ubuntu16 OpenGrok配置多项目
2019-03-29 14:26 1206以前的博客介绍过OpenGrok配置一个项目,这里介绍下 ... -
android adb shell su设置密码
2019-03-26 14:02 25951.打开su源码在system/extras/su/su. ... -
make日志同时输出到控制台和文件
2019-03-22 10:23 12730 标准输入 stdin = standard in ... -
增加自定义property目录
2019-03-18 10:04 365打开文件system/core/init/property ... -
recovery增加打印到串口和增加复制代码
2019-03-07 09:49 634项目里需要调试recover,网上查了部分资料,增加了 ... -
android adb shell命令启动应用
2019-03-01 13:33 13961.执行adb shell 2.这里以打开设置为例: ... -
android HAL层例子
2019-02-27 11:15 1200上一篇文章已经写了led驱动,这篇文章我们再封装HAL层 ... -
FireFlay开发板点亮LED驱动开发
2019-02-22 11:09 518实现功能,点亮LED,参考了网上部分代码。 1.在目 ... -
RK3288 默认打开adb调试
2019-02-19 14:03 2225在文件:vendor/rockchip/firefly/us ... -
RK3288 修改开机动画和开机图片
2019-02-18 11:25 1829开机动画: 1.创建一个目录frameworks/ba ... -
android系统修改默认语言为中文
2019-02-18 11:19 885修改 build/target/product/full_b ... -
ubuntu OpenGrok的搭建
2019-02-18 11:15 1018下载apache-tomcat-8.5.37和opengro ... -
gradleview错误定位
2019-01-08 14:39 3851、打开cmd,进入项目的gradle所在目录 2、键入gra ... -
安卓系统签名转keystore
2017-11-23 10:53 1230./keytool-importkeypair -k ./de ... -
抓jni日志
2017-11-16 14:29 378建一个sh文件,内容如下,将crash内容复制到crash.t ... -
android使用ffmpeg库
2017-03-15 09:42 6391.建立一个安卓工程,创建jni目录,将上一篇文章中的库和头文 ... -
FFMPEG android 库编译
2017-03-14 13:57 6501.首先下载ffmpeg源码:http://www.ffmpe ... -
Windows搭建OpenGrok
2014-12-08 11:33 16691.下载opengrok-0.11.1.tar.gz 二进制包 ... -
怎么给apk签名
2014-11-08 21:51 674jarsigner -verbose -keystore 证书 ... -
OpenGrok搜索技巧
2014-09-26 15:59 2733+ 表示包含此字符串,- 表示包含此字符串。例如在 Full ...
相关推荐
本"android数据库操作demo"主要展示了如何在Android应用中进行SQLite数据库的基本操作,包括增、删、改、查四大功能。下面我们将详细探讨这些知识点。 首先,要创建一个SQLite数据库,我们需要创建一个`...
"android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...
本文将深入探讨Android中的SQLite数据库操作以及如何在命令行上操作SQLite。 首先,让我们了解Android如何与SQLite交互。在Android中,我们通常通过SQLiteOpenHelper类来创建、升级和访问数据库。这个类提供了方法...
总结来说,这个"android数据库操作实例"涵盖了Android应用中使用SQLite数据库的基础知识,包括创建数据库、定义表结构、插入、查询、更新和删除数据等操作。通过学习这个实例,开发者可以更好地理解如何在Android...
本Demo——"你想要的Android数据库操作精华(安全、并发、单例等)",旨在深入探讨如何在Android Studio环境下进行高效且安全的数据库操作,包括使用数据库框架、数据库加密、并发控制以及单例模式的应用。...
本示例"android数据库操作Demo"提供了一个基础的教程,涵盖了数据库的基本操作,包括添加数据(增)、删除数据(删)、查询数据(查)和更新数据(改)。我们将深入探讨这些核心概念。 首先,Android使用SQLite作为...
在这个"android 数据库操作demo"中,我们将深入探讨如何在Android环境下使用SQLite进行数据库操作,包括创建数据库、创建表、插入数据、查询数据、更新数据以及删除数据等核心概念。 1. **创建数据库**: 在...
`Cursor`是Android数据库操作中的一个关键接口,它就像一个指针,可以遍历查询结果。常见的`Cursor`方法包括: - `moveToPosition(position)`移动指针到指定的记录。 - `getColumnIndex(columnName)`获取指定列的...
在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。
在Android开发中,数据库操作是不可或缺的一部分,尤其是在处理大量数据存储和检索时。"android 数据库操作代码生成器(version 0.1)-32位" 是一个专为提高开发效率而设计的工具,它能够自动生成数据库操作的相关代码...
在Android开发中,数据库操作是常见的任务之一,用于存储和检索应用程序的数据。为了简化这一过程,开发者通常会创建一个数据库帮助类(DataBaseHelper)来封装SQLite数据库的操作。在这个场景下,我们有一个名为`...
Android数据库sqlite操作命令指导,同时可以快速调试定位问题点,并获取有用信息。
在这个"android 数据库操作"项目中,开发者不仅实现了添加和查询功能,还隐藏地支持了修改和删除操作。 1. **SQLite数据库简介** SQLite是一个嵌入式数据库,它不需要单独的服务器进程,可以直接在应用程序中使用...
android sqlite 操作工具包
Android 数据库操作 greendao-2.0.0.jar
本实例代码主要关注如何在Android中进行数据库操作,这涉及到SQLite数据库,它是Android系统内置的关系型数据库管理系统。SQLite轻量级、易于使用且功能强大,非常适合移动设备。 首先,我们需要创建一个SQLite...
在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、开源的、关系型数据库,被广泛用于存储和管理应用程序中的数据。...通过学习和实践这些示例,开发者能够熟练掌握Android中的SQLite数据库操作。