- 浏览: 115467 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
eyeandroid_com:
貌似掉线 写道其实ImageView, ImageButton ...
【Android每日一讲】2012.11.12 设计具有背景图的按钮 - ImageButton的焦点及事件处理 -
貌似掉线:
其实ImageView, ImageButton, Butto ...
【Android每日一讲】2012.11.12 设计具有背景图的按钮 - ImageButton的焦点及事件处理 -
lhw0531:
有推广嫌疑
【史上最全的】Android应用源码免费下载 -
tenderuser:
L_sharp 写道no pic u c a xx没有图片,你 ...
自定义ViewGroup实现ViewPager的滑动效果(附源码下载) -
L_sharp:
no pic u c a xx
自定义ViewGroup实现ViewPager的滑动效果(附源码下载)
一 主要内容
1.概述
2.定义Schema与Contract
3.使用SQL Helper创建数据库
4.向数据库添加信息
5.从数据库中读取信息
6.删除数据库中的信息
7.更新数据库中的信息
二 翻译转载
对于重复或者结构化的数据(如联系人信息)等保存到DB是个不错的主意。这节课假定你已经熟悉SQL数据库的操作。在Android上可能会使用到的APIs,可以从android.database.sqlite包中找到。
Define a Schema and Contract [定义Schema与Contract]
SQL中一个中重要的概念是schema:一种DB结构的正式声明。schema是从你创建DB的SQL语句中生成的。你可能会发现创建一个创建一个伴随类(companion class)是很有益的,这个类成为合约类(contract class),它用一种系统化并且自动生成文档的方式,显示指定了你的schema样式。
Contract Clsss是一些常量的容器。它定义了例如URIs, 表名,列名等。这个contract类允许你在同一个包下与其他类使用同样的常量。 它让你只需要在一个地方修改列名,然后这个列名就可以自动传递给你整个code。
一个组织你的contract类的好方法是在你的类的根层级定义一些全局变量,然后为每一个table来创建内部类。
Note: 通过实现 BaseColumns 的接口,你的内部类可以继承到一个名为_ID的主键,这个对于Android里面的一些类似cursor adaptor类是很有必要的。这样能够使得你的DB与Android的framework能够很好的相容。
例如,下面的例子定义了表名与这个表的列名:
public static abstract class FeedEntry implements BaseColumns {
public static final String TABLE_NAME = "entry";
public static final String COLUMN_NAME_ENTRY_ID = "entryid";
public static final String COLUMN_NAME_TITLE = "title";
public static final String COLUMN_NAME_SUBTITLE = "subtitle";
...
}
为了防止一些人不小心实例化contract类,像下面一样给一个空的构造器。
// Prevents the FeedReaderContract class from being instantiated.
private FeedReaderContract() {}
Create a Database Using a SQL Helper [使用SQL Helper创建DB]
当你定义好了你的DB应该是什么样之后,你应该实现那些创建与维护db与table的方法。下面是一些典型的创建与删除table的语句。
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedReaderContract.FeedEntry.TABLE_NAME + " (" +
FeedReaderContract.FeedEntry._ID + " INTEGER PRIMARY KEY," +
FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
... // Any other options for the CREATE command
" )";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + TABLE_NAME_ENTRIES;
就像保存文件到设备的 internal storage 一样,Android会保存db到你的程序的private的空间上。你的数据是受保护的,因为那些区域默认是私有的,不可被其他程序所访问。
在 SQLiteOpenHelper 类中有一些很有用的APIs。当你使用这个类来做一些与你的db有关的操作时,系统会对那些有可能比较耗时的操作(例如创建与更新等)在真正需要的时候才去执行,而不是在app刚启动的时候就去做那些动作。你所需要做的仅仅是执行 getWritableDatabase() 或者 getReadableDatabase().
Note: 因为那些操作可能是很耗时的,请确保你在background thread(AsyncTask or IntentService)里面去执行 getWritableDatabase() 或者 getReadableDatabase() 。
为了使用 SQLiteOpenHelper, 你需要创建一个子类并重写 onCreate(), onUpgrade() 与 onOpen()等callback方法。你也许还需要实现 onDowngrade(), 但是这并不是必需的。
例如,下面是一个实现了SQLiteOpenHelper 类的例子:
public class FeedReaderDbHelper extends SQLiteOpenHelper {
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "FeedReader.db";
public FeedReaderDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}
为了访问你的db,需要实例化你的 SQLiteOpenHelper的子类:
FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
Put Information into a Database [添加信息到DB]
通过传递一个 ContentValues 对象到 insert() 方法:
// Gets the data repository in write mode
SQLiteDatabase db = mDbHelper.getWritableDatabase();
// Create a new map of values, where column names are the keys
ContentValues values = new ContentValues();
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID, id);
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CONTENT, content);
// Insert the new row, returning the primary key value of the new row
long newRowId;
newRowId = db.insert(
FeedReaderContract.FeedEntry.TABLE_NAME,
FeedReaderContract.FeedEntry.COLUMN_NAME_NULLABLE,
values);
insert() 方法的第一个参数是table名,第二个参数会使得系统自动对那些 ContentValues 没有提供数据的列填充数据为null,如果第二个参数传递的是null,那么系统则不会对那些没有提供数据的列进行填充。
Read Information from a Database [从DB中读取信息]
为了从DB中读取数据,需要使用 query() 方法, 传递你需要查询的条件。查询后会返回一个 Cursor 对象。
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
FeedReaderContract.FeedEntry._ID,
FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE,
FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED,
...
};
// How you want the results sorted in the resulting Cursor
String sortOrder =
FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED + " DESC";
Cursor c = db.query(
FeedReaderContract.FeedEntry.TABLE_NAME, // The table to query
projection, // The columns to return
selection, // The columns for the WHERE clause
selectionArgs, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
下面是演示如何从course对象中读取数据信息:
cursor.moveToFirst();
long itemId = cursor.getLong(
cursor.getColumnIndexOrThrow(FeedReaderContract.FeedEntry._ID)
);
Delete Information from a Database [删除DB中的信息]
和查询信息一样,删除数据,同样需要提供一些删除标准。DB的API提供了一个防止SQL注入的机制来创建查询与删除标准。
SQL Injection[随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。]
这个机制把查询语句划分为选项条款与选项参数两部分。条款部分定义了查询的列是怎么样的,参数部分用来测试是否符合前面的条款。[这里翻译的怪怪的,附上原文,The clause defines the columns to look at, and also allows you to combine column tests. The arguments are values to test against that are bound into the clause.] 因为处理的结果与通常的SQL语句不同,这样可以避免SQL注入问题。
/ Define 'where' part of query.
String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
// Specify arguments in placeholder order.
String[] selelectionArgs = { String.valueOf(rowId) };
// Issue SQL statement.
db.delete(table_name, mySelection, selectionArgs);
Update a Database [更新数据]
当你需要修改DB中的某些数据时,使用 update() 方法。
更新操作结合了插入与删除的语法。
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// New value for one column
ContentValues values = new ContentValues();
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
// Which row to update, based on the ID
String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
String[] selelectionArgs = { String.valueOf(rowId) };
int count = db.update(
FeedReaderDbHelper.FeedEntry.TABLE_NAME,
values,
selection,
selectionArgs);
三 视频讲解
http://www.eyeandroid.com/thread-14567-1-1.html
1.概述
2.定义Schema与Contract
3.使用SQL Helper创建数据库
4.向数据库添加信息
5.从数据库中读取信息
6.删除数据库中的信息
7.更新数据库中的信息
二 翻译转载
对于重复或者结构化的数据(如联系人信息)等保存到DB是个不错的主意。这节课假定你已经熟悉SQL数据库的操作。在Android上可能会使用到的APIs,可以从android.database.sqlite包中找到。
Define a Schema and Contract [定义Schema与Contract]
SQL中一个中重要的概念是schema:一种DB结构的正式声明。schema是从你创建DB的SQL语句中生成的。你可能会发现创建一个创建一个伴随类(companion class)是很有益的,这个类成为合约类(contract class),它用一种系统化并且自动生成文档的方式,显示指定了你的schema样式。
Contract Clsss是一些常量的容器。它定义了例如URIs, 表名,列名等。这个contract类允许你在同一个包下与其他类使用同样的常量。 它让你只需要在一个地方修改列名,然后这个列名就可以自动传递给你整个code。
一个组织你的contract类的好方法是在你的类的根层级定义一些全局变量,然后为每一个table来创建内部类。
Note: 通过实现 BaseColumns 的接口,你的内部类可以继承到一个名为_ID的主键,这个对于Android里面的一些类似cursor adaptor类是很有必要的。这样能够使得你的DB与Android的framework能够很好的相容。
例如,下面的例子定义了表名与这个表的列名:
public static abstract class FeedEntry implements BaseColumns {
public static final String TABLE_NAME = "entry";
public static final String COLUMN_NAME_ENTRY_ID = "entryid";
public static final String COLUMN_NAME_TITLE = "title";
public static final String COLUMN_NAME_SUBTITLE = "subtitle";
...
}
为了防止一些人不小心实例化contract类,像下面一样给一个空的构造器。
// Prevents the FeedReaderContract class from being instantiated.
private FeedReaderContract() {}
Create a Database Using a SQL Helper [使用SQL Helper创建DB]
当你定义好了你的DB应该是什么样之后,你应该实现那些创建与维护db与table的方法。下面是一些典型的创建与删除table的语句。
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedReaderContract.FeedEntry.TABLE_NAME + " (" +
FeedReaderContract.FeedEntry._ID + " INTEGER PRIMARY KEY," +
FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
... // Any other options for the CREATE command
" )";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + TABLE_NAME_ENTRIES;
就像保存文件到设备的 internal storage 一样,Android会保存db到你的程序的private的空间上。你的数据是受保护的,因为那些区域默认是私有的,不可被其他程序所访问。
在 SQLiteOpenHelper 类中有一些很有用的APIs。当你使用这个类来做一些与你的db有关的操作时,系统会对那些有可能比较耗时的操作(例如创建与更新等)在真正需要的时候才去执行,而不是在app刚启动的时候就去做那些动作。你所需要做的仅仅是执行 getWritableDatabase() 或者 getReadableDatabase().
Note: 因为那些操作可能是很耗时的,请确保你在background thread(AsyncTask or IntentService)里面去执行 getWritableDatabase() 或者 getReadableDatabase() 。
为了使用 SQLiteOpenHelper, 你需要创建一个子类并重写 onCreate(), onUpgrade() 与 onOpen()等callback方法。你也许还需要实现 onDowngrade(), 但是这并不是必需的。
例如,下面是一个实现了SQLiteOpenHelper 类的例子:
public class FeedReaderDbHelper extends SQLiteOpenHelper {
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "FeedReader.db";
public FeedReaderDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}
为了访问你的db,需要实例化你的 SQLiteOpenHelper的子类:
FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
Put Information into a Database [添加信息到DB]
通过传递一个 ContentValues 对象到 insert() 方法:
// Gets the data repository in write mode
SQLiteDatabase db = mDbHelper.getWritableDatabase();
// Create a new map of values, where column names are the keys
ContentValues values = new ContentValues();
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID, id);
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CONTENT, content);
// Insert the new row, returning the primary key value of the new row
long newRowId;
newRowId = db.insert(
FeedReaderContract.FeedEntry.TABLE_NAME,
FeedReaderContract.FeedEntry.COLUMN_NAME_NULLABLE,
values);
insert() 方法的第一个参数是table名,第二个参数会使得系统自动对那些 ContentValues 没有提供数据的列填充数据为null,如果第二个参数传递的是null,那么系统则不会对那些没有提供数据的列进行填充。
Read Information from a Database [从DB中读取信息]
为了从DB中读取数据,需要使用 query() 方法, 传递你需要查询的条件。查询后会返回一个 Cursor 对象。
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
FeedReaderContract.FeedEntry._ID,
FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE,
FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED,
...
};
// How you want the results sorted in the resulting Cursor
String sortOrder =
FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED + " DESC";
Cursor c = db.query(
FeedReaderContract.FeedEntry.TABLE_NAME, // The table to query
projection, // The columns to return
selection, // The columns for the WHERE clause
selectionArgs, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
下面是演示如何从course对象中读取数据信息:
cursor.moveToFirst();
long itemId = cursor.getLong(
cursor.getColumnIndexOrThrow(FeedReaderContract.FeedEntry._ID)
);
Delete Information from a Database [删除DB中的信息]
和查询信息一样,删除数据,同样需要提供一些删除标准。DB的API提供了一个防止SQL注入的机制来创建查询与删除标准。
SQL Injection[随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。]
这个机制把查询语句划分为选项条款与选项参数两部分。条款部分定义了查询的列是怎么样的,参数部分用来测试是否符合前面的条款。[这里翻译的怪怪的,附上原文,The clause defines the columns to look at, and also allows you to combine column tests. The arguments are values to test against that are bound into the clause.] 因为处理的结果与通常的SQL语句不同,这样可以避免SQL注入问题。
/ Define 'where' part of query.
String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
// Specify arguments in placeholder order.
String[] selelectionArgs = { String.valueOf(rowId) };
// Issue SQL statement.
db.delete(table_name, mySelection, selectionArgs);
Update a Database [更新数据]
当你需要修改DB中的某些数据时,使用 update() 方法。
更新操作结合了插入与删除的语法。
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// New value for one column
ContentValues values = new ContentValues();
values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
// Which row to update, based on the ID
String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
String[] selelectionArgs = { String.valueOf(rowId) };
int count = db.update(
FeedReaderDbHelper.FeedEntry.TABLE_NAME,
values,
selection,
selectionArgs);
三 视频讲解
http://www.eyeandroid.com/thread-14567-1-1.html
发表评论
-
[Android Training视频系列] 8.3 Dealing with Audio Output Hardware
2013-07-19 21:29 757用户在播放音乐的时候 ... -
[Android Training视频系列] 8.2 Managing Audio Focus
2013-07-19 00:20 1170视频讲解:http://www.eyeandroid.com/ ... -
[Android Training视频系列] 8.1 Controlling Your App’s Volume and Playback
2013-07-17 22:26 854主要内容: 1 鉴别使用 ... -
[Android教程]通过Intent分享数据内容给其他应用程序
2013-05-16 07:57 718一:主要内容 本文档首先介绍如何通过发送Intent来分享数据 ... -
[Android Training视频系列] 6.2 Saving Files(保存文件)
2013-02-19 00:11 749一:主要内容 1.概述 2.选择内部存储还是外部存储 3.获取 ... -
【Android您问我讲】Android 2.x中使用actionbar - Actionbarsherlock的使用
2013-01-06 11:34 17051. 范例说明 从Android 3.0开始,Android引 ... -
【Android您问我讲】带左右滑动的选项卡 - ViewPager与Tabhost的结合使用
2013-01-02 00:34 22901. 范例说明 ViewPager实现滑动切换的效果,但是切换 ... -
【Android您问我讲】如何使用选显卡 - Tabhost的使用
2012-12-23 00:40 10991. 范例说明 TabHost是Android系统中提供的一 ... -
[Android Training视频系列]6.1 Saving Key-Value Sets
2012-12-22 10:35 8121.主要内容 本小节介绍S ... -
[Android Training视频系列]2.4 Recreating an Activity
2012-12-18 00:34 9301.主要内容 本讲讲解onSaveInstanceState与 ... -
【Android您问我讲】超炫的左右滑动效果 - ViewPager的使用
2012-12-16 20:45 10511. 范例说明 •android-support-v4.jar ... -
[Android Training视频系列]2.3 Stopping and Restarting an Activity
2012-12-16 13:14 9661.主要内容 本小节介绍onStop与onRestart以及 ... -
[Android Training视频系列]2.2 Pausing and Resuming an Activity
2012-12-14 00:58 10671.主要内容 本讲介绍onPause和onResume,主要分 ... -
[Android Training视频系列]2.1 Starting an Activity
2012-12-13 00:07 9161.主要内容 本小节首先对Activity的各个生命周期作简 ... -
[Android Training视频系列]1.4 Starting Another Activity
2012-12-12 00:29 8851.主要内容 本小结在1.3 ... -
[Android Samples视频系列之ApiDemos] App-Activity-TranslucentBlur和Wallpaper
2012-12-09 23:56 7701.Demo说明与演示 TranslucentBulr :这个 ... -
[Android Samples视频系列之ApiDemos] App-Activity-Translucent
2012-12-05 00:12 8911.Demo说明与演示 该Demo显示一个半透明Activit ... -
[Android Samples视频系列之ApiDemos] App-Activity-SetWallpaper
2012-12-03 00:12 9841.Demo说明与演示 该Demo介绍如何在Android获取 ... -
【Android每日一讲】2012.11.29 自定义下拉菜单模式 - Spinner与setDropDownViewResource
2012-12-01 13:19 11671. 范例说明 Spinner就是下拉菜单,由于手机画面有限, ... -
【Android每日一讲】2012.11.28 快速地搜索手机文件引擎 - Java IO的应用
2012-11-28 00:25 10471. 范例说明 大家都应该用过操作系统的文件搜索功能吧!它可以 ...
相关推荐
上篇文章学习了android保存文件,今天学习的是保存数据到SQL数据库中。相信大家对数据库都不陌生。对于大量重复的,有特定结构的数据的保存,用 SQL数据库 来保存是最理想不过了。 下面将用一个关于联系人的数据库...
SQLite数据库引擎被集成到Android系统中,为开发者提供了方便的数据管理方式,无需额外安装服务。这篇博客“Android SQLite学习工具”可能详细介绍了如何在Android环境中使用SQLite进行数据操作,并提供了一个实用的...
- **数据库存储位置**:创建的数据库文件默认存储在设备的`data/data/<项目包名>/databases/`目录下。 通过以上知识点的学习,开发者可以更好地理解如何在Android应用中使用SQLite数据库,从而实现更高效、可靠的...
本教程将指导你如何将Excel数据导入到Android应用的SQLite数据库.db文件中,以便在应用运行时能够访问和操作这些数据。我们将使用SQLite Expert Professional这款强大的SQLite数据库管理工具,该工具在提供的压缩包...
数据导出到CSV文件,SQL脚本,Excel或SQLite的。 使用拖放操作之间的SQLite数据库复制表。 通过剪贴板中的数据导出到Excel。 数据编辑 在使用功能强大的就地编辑网格的编辑数据。 图像编辑器目前支持...
在Android系统中,SQLite是一个轻量级的数据库引擎,它被广泛用于移动应用来存储数据。当我们在Android设备上进行应用程序开发或者进行调试时,有时需要直接与SQLite数据库交互,例如查询、修改或分析数据。在这样的...
adb shell sqlite3 /data/data/<package_name>/databases/ ``` 4. 在SQLite3的命令行界面中,你可以执行SQL命令,如`SELECT * FROM table_name;` 来查询数据。 值得注意的是,对"/system/xbin"目录的操作通常...
3. 寻找数据库文件:在"Data/data/your_package_name/databases/"目录下,你可以找到你的应用创建的SQLite数据库文件,通常命名为"your_database_name.db"。 4. 下载数据库文件:右键点击数据库文件,选择"Save As.....
通常,这涉及到在应用安装时复制数据库文件到特定的SQLite数据路径(通常是`/data/data/<package_name>/databases/`)。 总结来说,Android中的SQLite数据库是一个强大而灵活的数据存储解决方案。通过...
在Android开发中,SQLite数据库是应用存储数据的重要方式,尤其适用于资源有限的移动设备。SQLite是一个轻量级的、开源的、嵌入式的SQL数据库,它具有高效的性能,并且能够支持SQL查询。SQLite数据库的内部结构包括...
SQLite3作为一个轻量级的数据库,不需要独立的服务器进程,且能够直接嵌入到Android应用中,使得开发者可以方便地进行数据存储和管理。然而,由于Android系统默认并不提供命令行版本的SQLite3,因此在进行一些高级...
1. 导出模拟器数据库文件:找到 data 目录下->应用程序包名->databases 文件夹下的数据库文件,右键保存到本地。 2. 查看数据库文件:打开第一步保存的 db 文件,选择需要查看的表,右边切到 Data 即可查看表的数据...
启动软件后,点击"Open database",选择Android应用的data/data/your_package_name/databases目录下的"MyDatabase.db"文件。这样,你就可以看到刚刚在Android应用中创建的"UserTable",并且可以执行SQL查询、添加、...
在Android应用开发中,SQLite数据库通常用于存储应用的本地数据,比如用户设置、游戏进度或者任何需要持久化存储的信息。然而,有时我们可能需要在应用安装时就预填充一些数据到SQLite数据库,例如测试数据或者初始...
在Android系统中,SQLite是一个内置的轻量级数据库引擎,用于存储应用程序的数据。SQLite3是其更新版本,提供了更高效和稳定的数据管理功能。对于Android 4.4(KitKat)和5.0(Lollipop)这两个较早的系统版本,安装...
在Android开发中,SQLite是一个非常重要的组件,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的结构化数据。本篇将基于提供的"android存取Sqlite3数据库demo"进行详细的解析,...
运行该程序后,你可以通过菜单或拖放操作打开你的 Android 应用的数据库文件(通常位于设备的 `/data/data/your_package_name/databases/` 路径下,需要通过 Android SDK 的 `adb` 工具进行复制到电脑)。...