系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider) 作者:webabcd 介绍 在 Android 中使用 SQLite, ContentProvider 数据库支持(SQLite) - Android 开发平台提供了操作 SQLite 数据库的相关 API 内容提供器(ContentProvider) - 当数据需要在应用程序之间共享时,可以在某程序中使用 ContentProvider 定义 URI, 以使其它应用程序可以通过此 URI 访问指定的数据 1、SQLite 的 Demo DatabaseHelper.java Java代码 代码 package com.webabcd.SQLite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; // 数据库操作的 Helper 类 public class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version) { super(context, name, cursorFactory, version); } @Override public void onCreate(SQLiteDatabase db) { // TODO 创建数据库后,对数据库的操作 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO 更改数据库版本的操作 } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); // TODO 每次成功打开数据库后首先被执行 } } Main.java 代码 package com.webabcd.SQLite; import java.util.Random; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { private DatabaseHelper dbHelper; private static final String DATABASE_NAME = "db.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "employee"; TextView txtMsg; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dbHelper = new DatabaseHelper(this, DATABASE_NAME, null, DATABASE_VERSION); txtMsg = (TextView) this.findViewById(R.id.txtMsg); Button btn1 = (Button) this.findViewById(R.id.btn1); btn1.setText("创建表"); btn1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { CreateTable(); } }); Button btn2 = (Button) this.findViewById(R.id.btn2); btn2.setText("插入 3 条记录"); btn2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { insertItem(); } }); Button btn3 = (Button) this.findViewById(R.id.btn3); btn3.setText("删除全部记录"); btn3.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { deleteItem(); } }); Button btn4 = (Button) this.findViewById(R.id.btn4); btn4.setText("更新指定数据"); btn4.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { updateItem(); } }); Button btn5 = (Button) this.findViewById(R.id.btn5); btn5.setText("显示全部数据"); btn5.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { showItems(); } }); Button btn6 = (Button) this.findViewById(R.id.btn6); btn6.setText("删除表"); btn6.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { dropTable(); } }); } // 创建数据表 private void CreateTable() { SQLiteDatabase db = dbHelper.getWritableDatabase(); String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (ID INTEGER PRIMARY KEY, Name VARCHAR, Age INTEGER);"; try { db.execSQL(sql); txtMsg.append("数据表成功创建\n"); } catch (SQLException ex) { txtMsg.append("数据表创建错误\n" + ex.toString() + "\n"); } } // 插入数据 private void insertItem() { SQLiteDatabase db = dbHelper.getWritableDatabase(); try { Random random = new Random(); for (int i = 0; i < 3; i++) { String sql = "insert into " + TABLE_NAME + " (name, age) values ('name" + String.valueOf(i) + "', " + random.nextInt() + ")"; // execSQL() - 执行指定的 sql db.execSQL(sql); } txtMsg.append("成功插入 3 条数据\n"); } catch (SQLException ex) { txtMsg.append("插入数据失败\n" + ex.toString() + "\n"); } } // 删除数据 private void deleteItem() { try { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete(TABLE_NAME, " id < 999999", null); txtMsg.append("成功删除数据\n"); } catch (SQLException e) { txtMsg.append("删除数据失败\n"); } } // 更新数据 private void updateItem() { SQLiteDatabase db = dbHelper.getWritableDatabase(); try { ContentValues values = new ContentValues(); values.put("name", "批量更新后的名字"); db.update(TABLE_NAME, values, "id<?", new String[] { "3" }); txtMsg.append("成功更新数据\n"); } catch (SQLException e) { txtMsg.append("更新数据失败\n"); } } // 查询数据 private void showItems() { SQLiteDatabase db = dbHelper.getReadableDatabase(); try { String[] column = { "id", "name", "age" }; Cursor cursor = db.query(TABLE_NAME, column, null, null, null, null, null); Integer num = cursor.getCount(); txtMsg.append("共 " + Integer.toString(num) + " 条记录\n"); cursor.moveToFirst(); while (cursor.getPosition() != cursor.getCount()) { txtMsg.append(Integer.toString(cursor.getPosition()) + "," + String.valueOf(cursor.getString(0)) + "," + cursor.getString(1) + "," + String.valueOf(cursor.getString(2)) + "\n"); cursor.moveToNext(); } } catch (SQLException ex) { txtMsg.append("读取数据失败\n" + ex.toString() + "\n"); } } // 删除数据表 private void dropTable() { SQLiteDatabase db = dbHelper.getWritableDatabase(); String sql = "DROP TABLE IF EXISTS " + TABLE_NAME; try { db.execSQL(sql); txtMsg.append("数据表删除成功\n"); } catch (SQLException ex) { txtMsg.append("数据表删除错误\n" + ex.toString() + "\n"); } } } 2、ContentProvider 的 Demo MyUser.java 代码 package com.webabcd.contentprovider; import android.net.Uri; import android.provider.BaseColumns; // 自定义 ContentProvider 所需的实体类 public class MyUser { // 必须要有 _id 字段。本例中 BaseColumn 类中已经包含了 _id 字段 public static final class User implements BaseColumns { // 定义 CONTENT_URI public static final Uri CONTENT_URI = Uri.parse("content://com.webabcd.MyContentProvider"); // 表数据列 public static final String USER_NAME = "USER_NAME"; } } MyContentProvider.java 代码 package com.webabcd.contentprovider; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.http.util.EncodingUtils; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.database.MatrixCursor; import android.net.Uri; // 继承 ContentProvider 以实现自定义的 ContentProvider(基于文件的信息存储) public class MyContentProvider extends ContentProvider { private File file; private FileOutputStream out; private FileInputStream in; // ContentProvider 的删除数据接口 @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub return null; } // ContentProvider 的插入数据接口 @Override public Uri insert(Uri uri, ContentValues values) { try { out = new FileOutputStream(file); out.write(values.getAsString(MyUser.User.USER_NAME).getBytes()); out.close(); int rowId = 0; Uri rowUri = ContentUris.appendId( MyUser.User.CONTENT_URI.buildUpon(), rowId).build(); getContext().getContentResolver().notifyChange(rowUri, null); return rowUri; } catch (Exception e) { return null; } } // 创建用于保存信息的文件 @Override public boolean onCreate() { try { // 每个包中应用程序的私有目录为:/data/data/包名/ // SD 卡目录为:/sdcard file = new File("/data/data/com.webabcd.contentprovider/", "demo.txt"); if (!file.exists()) file.createNewFile(); return true; } catch (Exception ex) { return false; } } // ContentProvider 的查询数据接口 @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { String content; try { in = new FileInputStream(file); int length = (int) file.length(); byte[] buffer = new byte[length]; in.read(buffer, 0, length); content = EncodingUtils.getString(buffer, "UTF-8"); in.close(); String[] columns = new String[] { MyUser.User._ID, MyUser.User.USER_NAME }; MatrixCursor cur = new MatrixCursor(columns); String[] values = new String[] { "0", content }; cur.moveToFirst(); cur.addRow(values); return cur; } catch (Exception e) { return null; } } // ContentProvider 的更新数据接口 @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub return 0; } } Main.java 代码 package com.webabcd.contentprovider; import java.util.Random; import android.app.Activity; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.Contacts; import android.provider.Contacts.People; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; /* * 几个常用的系统内置的 ContentProvider 如下: * content://media/internal/images 这个URI将返回设备上存储的所有图片 * content://contacts/people/ 这个URI将返回设备上的所有联系人信息 * content://contacts/people/45 这个URI返回单个结果(联系人信息中ID为45的联系人记录) */ public class Main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn1 = (Button) this.findViewById(R.id.btn1); btn1.setText("新增联系人记录"); btn1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Random random = new Random(); insertRecords("name" + String.valueOf(random.nextInt()), String .valueOf(random.nextInt())); } }); Button btn2 = (Button) this.findViewById(R.id.btn2); btn2.setText("查看联系人记录"); btn2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { displayRecords(); } }); Button btn3 = (Button) this.findViewById(R.id.btn3); btn3.setText("清除联系人记录"); btn3.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { deleteRecords(); } }); Button btn4 = (Button) this.findViewById(R.id.btn4); btn4.setText("更新联系人记录"); btn4.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // 此处只是演示,id 来自 People._ID ,可参见 displayRecords() 是如何获取 id 的 int id = 0; updateRecord(id, "修改后的name"); } }); Button btn5 = (Button) this.findViewById(R.id.btn5); btn5.setText("新增记录到 MyContentProvider"); btn5.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { insertRecord2MyContentProvider("webabcd"); } }); Button btn6 = (Button) this.findViewById(R.id.btn6); btn6.setText("获取记录从 MyContentProvider"); btn6.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { displayRecord2MyContentProvider(); } }); } // 调用 ContentProvider 的插入接口 private void insertRecords(String name, String phoneNum) { ContentValues values = new ContentValues(); values.put(People.NAME, name); Uri uri = getContentResolver().insert(People.CONTENT_URI, values); Log.d("MyDebug", uri.toString()); Uri numberUri = Uri.withAppendedPath(uri, People.Phones.CONTENT_DIRECTORY); Log.d("MyDebug", numberUri.toString()); values.clear(); values.put(Contacts.Phones.TYPE, People.Phones.TYPE_MOBILE); values.put(People.NUMBER, phoneNum); getContentResolver().insert(numberUri, values); } // 调用 ContentProvider 的查询接口 private void displayRecords() { String[] columns = new String[] { People._ID, People.NAME, People.NUMBER }; Uri contacts = People.CONTENT_URI; Log.d("MyDebug", contacts.toString()); Cursor cur = managedQuery(contacts, columns, // 要返回的数据字段 null, // WHERE子句 null, // WHERE 子句的参数 null // Order-by子句 ); if (cur.moveToFirst()) { String id = null; String name = null; String phoneNo = null; while (cur.getPosition() != cur.getCount()) { id = cur.getString(cur.getColumnIndex(People._ID)); name = cur.getString(cur.getColumnIndex(People.NAME)); phoneNo = cur.getString(cur.getColumnIndex(People.NUMBER)); Toast.makeText(this, id + " / " + name + " / " + phoneNo, Toast.LENGTH_SHORT).show(); cur.moveToNext(); } } } // 调用 ContentProvider 的删除接口 private void deleteRecords() { Uri uri = People.CONTENT_URI; Log.d("MyDebug", uri.toString()); getContentResolver().delete(uri, null, null); // getContentResolver().delete(uri, "NAME=" + "'name'", null); } // 调用 ContentProvider 的更新接口 private void updateRecord(int recordNo, String name) { Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, recordNo); Log.d("MyDebug", uri.toString()); ContentValues values = new ContentValues(); values.put(People.NAME, name); getContentResolver().update(uri, values, null, null); } // 调用自定义 ContentProvider 的插入接口 private void insertRecord2MyContentProvider(String name) { ContentValues values = new ContentValues(); values.put(MyUser.User.USER_NAME, name); getContentResolver().insert(MyUser.User.CONTENT_URI, values); } // 调用自定义 ContentProvider 的查询接口 private void displayRecord2MyContentProvider() { String[] columns = new String[] { MyUser.User.USER_NAME }; Uri uri = MyUser.User.CONTENT_URI; Cursor cur = managedQuery(uri, columns, null, null, null); while (cur.getPosition() != cur.getCount()) { String id = cur.getString(cur.getColumnIndex(People._ID)); String name = cur.getString(cur.getColumnIndex(MyUser.User.USER_NAME)); Toast.makeText(this, id + " / " + name, Toast.LENGTH_SHORT).show(); cur.moveToNext(); } } } AndroidManifest.xml 代码 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.webabcd.contentprovider" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 配置一个自定义的 ContentProvider" --> <provider android:name="MyContentProvider" android:authorities="com.webabcd.MyContentProvider" /> </application> <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission> <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> <uses-sdk android:minSdkVersion="3" /> </manifest>
您还没有登录,请您登录后再发表评论
这篇博客“Android SQLite学习工具”可能详细介绍了如何在Android环境中使用SQLite进行数据操作,并提供了一个实用的SQLite管理工具——sqlite3.exe。 SQLite数据库在Android中的应用主要包括创建数据库、创建表、...
一个简单的Android SQLite ORM框架不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-SQLite-ORM-Android,因为要传到github,所以代码中的注释和doc文档都是英文的,对自己英文不...
在Android开发中,SQLite是一个内置的关系型数据库系统,用于存储应用程序的数据。SQLite数据库因其轻量级、高效且易于集成的特点,被广泛应用于移动设备。为了更方便地管理和操作SQLite数据库,开发者通常会借助...
验证android sqlite数据库insert 和delete 方法返回值的具体规律 insert 插入一行,如果当前最大id是4,insert新的一条记录id是5 ,如果把5删除, 在insert一条新的记录id还是5,如果删除的是id为4的记录, 再新增一...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,允许开发者在移动设备上存储和管理数据。本资料包包含了对Android SQLite的详细文档和源码分析,帮助开发者深入理解其工作原理。 ...
SQLite 是一个轻量级的关系型数据库管理系统,广泛应用于移动设备,尤其是 Android 平台。它无需服务器进程,可直接在应用程序中使用,非常适合存储和管理应用程序数据。Android 系统自始至终内置了 SQLite 支持,...
《Android SQLite Admin 数据库管理软件详解》 在移动应用开发领域,SQLite作为一款轻量级的数据库管理系统,广泛应用于Android平台。它允许开发者在应用程序中存储、管理和检索数据,而无需依赖外部服务器。为了...
android SQLite DBHelper 单例模式 实现 dbhelper=DBHelper.getInstance(this);
在Android应用开发中,SQLite是一个轻量级的关系型数据库,它被广泛用于存储应用程序的数据。SQLite数据库具有体积小、速度快、无需单独服务器进程等优点,非常适合嵌入式系统,如移动设备上的Android应用。本教程将...
在Android应用开发中,SQLite是一个轻量级的关系型数据库,常用于存储应用程序中的结构化数据。SQLite数据库的优势在于它不需要单独的服务进程,而是直接嵌入到应用程序中,提供了高效的本地数据存储解决方案。在这...
**Android SQLite GreenDao类库详解** SQLite是Android操作系统中内置的关系型数据库系统,它轻量级、高效且易于使用,适合存储应用中的结构化数据。然而,直接使用原生的SQLite API进行数据库操作可能会显得繁琐,...
在Android系统中,SQLite是一个轻量级的数据库引擎,它被集成到每个Android设备中,为应用程序提供本地数据存储功能。SQLite3是SQLite的一个版本,适用于Android开发中的数据管理。这个"android sqlite3 demo"是一个...
SQLite是一款轻量级的数据库管理系统,它被广泛应用于Android应用程序中,因为它不需要独立的服务进程,而是内嵌在应用中,提供了高效、可靠的本地数据存储功能。"android SQLite数据库管理软件"是一个专为Android...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的结构化数据。本案例围绕"android sqlite数据库框架"展开,旨在通过Java注解...
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的数据库系统,适用于移动设备。SQLite被广泛用于存储和管理应用程序中的结构化数据。在这个"android Sqlite数据库操作demo"中,我们可以深入理解如何...
### 高清彩版 Android SQLite Essentials #### 一、引言与概述 《高清彩版 Android SQLite Essentials》是一本专注于Android平台下SQLite数据库应用开发的专业书籍。本书由Sunny Kumar Aditya 和 Vikash Kumar ...
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的数据库系统,用于存储应用程序中的结构化数据。SQLite数据库支持多种操作,如创建、查询、更新和删除数据,是移动应用开发中首选的本地数据存储解决...
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储应用中的结构化数据。SQLite数据库的优势在于它不需要独立的服务器进程,而是直接集成在应用程序中...
在Android开发中,SQLite是一个内置的关系型数据库,用于存储应用程序中的结构化数据。SQLite数据库具有轻量级、可移植和自包含的特点,非常适合移动设备。然而,由于其命令行界面和编程API的复杂性,开发者有时需要...
本示例"android sqlite的两种管理方法demo"旨在介绍如何在Android应用中使用SQLite,包括通过Java API和Android SQLite数据库API进行数据库操作。 首先,让我们详细探讨**Java的SQLite管理方法**。在Android中,你...
相关推荐
这篇博客“Android SQLite学习工具”可能详细介绍了如何在Android环境中使用SQLite进行数据操作,并提供了一个实用的SQLite管理工具——sqlite3.exe。 SQLite数据库在Android中的应用主要包括创建数据库、创建表、...
一个简单的Android SQLite ORM框架不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-SQLite-ORM-Android,因为要传到github,所以代码中的注释和doc文档都是英文的,对自己英文不...
在Android开发中,SQLite是一个内置的关系型数据库系统,用于存储应用程序的数据。SQLite数据库因其轻量级、高效且易于集成的特点,被广泛应用于移动设备。为了更方便地管理和操作SQLite数据库,开发者通常会借助...
验证android sqlite数据库insert 和delete 方法返回值的具体规律 insert 插入一行,如果当前最大id是4,insert新的一条记录id是5 ,如果把5删除, 在insert一条新的记录id还是5,如果删除的是id为4的记录, 再新增一...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,允许开发者在移动设备上存储和管理数据。本资料包包含了对Android SQLite的详细文档和源码分析,帮助开发者深入理解其工作原理。 ...
SQLite 是一个轻量级的关系型数据库管理系统,广泛应用于移动设备,尤其是 Android 平台。它无需服务器进程,可直接在应用程序中使用,非常适合存储和管理应用程序数据。Android 系统自始至终内置了 SQLite 支持,...
《Android SQLite Admin 数据库管理软件详解》 在移动应用开发领域,SQLite作为一款轻量级的数据库管理系统,广泛应用于Android平台。它允许开发者在应用程序中存储、管理和检索数据,而无需依赖外部服务器。为了...
android SQLite DBHelper 单例模式 实现 dbhelper=DBHelper.getInstance(this);
在Android应用开发中,SQLite是一个轻量级的关系型数据库,它被广泛用于存储应用程序的数据。SQLite数据库具有体积小、速度快、无需单独服务器进程等优点,非常适合嵌入式系统,如移动设备上的Android应用。本教程将...
在Android应用开发中,SQLite是一个轻量级的关系型数据库,常用于存储应用程序中的结构化数据。SQLite数据库的优势在于它不需要单独的服务进程,而是直接嵌入到应用程序中,提供了高效的本地数据存储解决方案。在这...
**Android SQLite GreenDao类库详解** SQLite是Android操作系统中内置的关系型数据库系统,它轻量级、高效且易于使用,适合存储应用中的结构化数据。然而,直接使用原生的SQLite API进行数据库操作可能会显得繁琐,...
在Android系统中,SQLite是一个轻量级的数据库引擎,它被集成到每个Android设备中,为应用程序提供本地数据存储功能。SQLite3是SQLite的一个版本,适用于Android开发中的数据管理。这个"android sqlite3 demo"是一个...
SQLite是一款轻量级的数据库管理系统,它被广泛应用于Android应用程序中,因为它不需要独立的服务进程,而是内嵌在应用中,提供了高效、可靠的本地数据存储功能。"android SQLite数据库管理软件"是一个专为Android...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的结构化数据。本案例围绕"android sqlite数据库框架"展开,旨在通过Java注解...
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的数据库系统,适用于移动设备。SQLite被广泛用于存储和管理应用程序中的结构化数据。在这个"android Sqlite数据库操作demo"中,我们可以深入理解如何...
### 高清彩版 Android SQLite Essentials #### 一、引言与概述 《高清彩版 Android SQLite Essentials》是一本专注于Android平台下SQLite数据库应用开发的专业书籍。本书由Sunny Kumar Aditya 和 Vikash Kumar ...
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的数据库系统,用于存储应用程序中的结构化数据。SQLite数据库支持多种操作,如创建、查询、更新和删除数据,是移动应用开发中首选的本地数据存储解决...
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储应用中的结构化数据。SQLite数据库的优势在于它不需要独立的服务器进程,而是直接集成在应用程序中...
在Android开发中,SQLite是一个内置的关系型数据库,用于存储应用程序中的结构化数据。SQLite数据库具有轻量级、可移植和自包含的特点,非常适合移动设备。然而,由于其命令行界面和编程API的复杂性,开发者有时需要...
本示例"android sqlite的两种管理方法demo"旨在介绍如何在Android应用中使用SQLite,包括通过Java API和Android SQLite数据库API进行数据库操作。 首先,让我们详细探讨**Java的SQLite管理方法**。在Android中,你...