`

Android 数据库操作

 
阅读更多
在数据库中保存了三个字段:id,name,url
首先实现数据库的操作类:代码如下
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);
    }
}
分享到:
评论

相关推荐

    android数据库操作demo

    本"android数据库操作demo"主要展示了如何在Android应用中进行SQLite数据库的基本操作,包括增、删、改、查四大功能。下面我们将详细探讨这些知识点。 首先,要创建一个SQLite数据库,我们需要创建一个`...

    android数据库操作封装

    "android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...

    Android 数据库操作 以及命令行上操作sqlite

    本文将深入探讨Android中的SQLite数据库操作以及如何在命令行上操作SQLite。 首先,让我们了解Android如何与SQLite交互。在Android中,我们通常通过SQLiteOpenHelper类来创建、升级和访问数据库。这个类提供了方法...

    android数据库操作实例

    总结来说,这个"android数据库操作实例"涵盖了Android应用中使用SQLite数据库的基础知识,包括创建数据库、定义表结构、插入、查询、更新和删除数据等操作。通过学习这个实例,开发者可以更好地理解如何在Android...

    你想要Android数据库操作精华(安全、并发、单例等)

    本Demo——"你想要的Android数据库操作精华(安全、并发、单例等)",旨在深入探讨如何在Android Studio环境下进行高效且安全的数据库操作,包括使用数据库框架、数据库加密、并发控制以及单例模式的应用。...

    android数据库操作Demo

    本示例"android数据库操作Demo"提供了一个基础的教程,涵盖了数据库的基本操作,包括添加数据(增)、删除数据(删)、查询数据(查)和更新数据(改)。我们将深入探讨这些核心概念。 首先,Android使用SQLite作为...

    android 数据库操作demo

    在这个"android 数据库操作demo"中,我们将深入探讨如何在Android环境下使用SQLite进行数据库操作,包括创建数据库、创建表、插入数据、查询数据、更新数据以及删除数据等核心概念。 1. **创建数据库**: 在...

    android数据库操作

    `Cursor`是Android数据库操作中的一个关键接口,它就像一个指针,可以遍历查询结果。常见的`Cursor`方法包括: - `moveToPosition(position)`移动指针到指定的记录。 - `getColumnIndex(columnName)`获取指定列的...

    Android数据库完美框架和示例

    在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。

    android 数据库操作代码生成器(version 0.1)-32位

    在Android开发中,数据库操作是不可或缺的一部分,尤其是在处理大量数据存储和检索时。"android 数据库操作代码生成器(version 0.1)-32位" 是一个专为提高开发效率而设计的工具,它能够自动生成数据库操作的相关代码...

    android 数据库操作封装类 继承可用

    在Android开发中,数据库操作是常见的任务之一,用于存储和检索应用程序的数据。为了简化这一过程,开发者通常会创建一个数据库帮助类(DataBaseHelper)来封装SQLite数据库的操作。在这个场景下,我们有一个名为`...

    Android数据库操作命令

    Android数据库sqlite操作命令指导,同时可以快速调试定位问题点,并获取有用信息。

    android 数据库操作

    在这个"android 数据库操作"项目中,开发者不仅实现了添加和查询功能,还隐藏地支持了修改和删除操作。 1. **SQLite数据库简介** SQLite是一个嵌入式数据库,它不需要单独的服务器进程,可以直接在应用程序中使用...

    android 数据库操作小插件

    android sqlite 操作工具包

    Android 数据库操作 greendao-2.0.0.jar

    Android 数据库操作 greendao-2.0.0.jar

    Android数据库操作实例代码

    本实例代码主要关注如何在Android中进行数据库操作,这涉及到SQLite数据库,它是Android系统内置的关系型数据库管理系统。SQLite轻量级、易于使用且功能强大,非常适合移动设备。 首先,我们需要创建一个SQLite...

    Android数据库操作示例

    在Android应用开发中,SQLite是一个重要的组成部分,它是一个轻量级的、开源的、关系型数据库,被广泛用于存储和管理应用程序中的数据。...通过学习和实践这些示例,开发者能够熟练掌握Android中的SQLite数据库操作。

Global site tag (gtag.js) - Google Analytics