Android 中数据库查询方法 query
第4章 Android中的数据存储

第4章Android中的数据存取程序是数据的输入、处理、输出的过程,不管是操作系统还是应用程序,都不可避免要用到大量的数据。
由于内存容量有限,且一旦关机,内存中的信息都消失,因此,一般把需要下次使用的数据保存在磁盘(对于手机来说SD卡)中。
操作系统一般以文件的形式来保存数据,而应用程序更喜欢使用数据库来保存。
在手机中,也有许多需要保存的数据,如音频文件、视频、图片、通讯录、短信、游戏中的设置等数据。
Android作为一种手机上的操作系统,提供了以下几种数据存取方式:Preference(配置)、File(文件)、SQLite(数据库)、网络等。
另外,在Android中,各个应用程序组件之间是相互独立的,彼此的数据一般不能共享,为了实现数据的共享,Android提供Content Provider组件来实现应用程序之间的数据共享(最典型的共享就如通讯录)。
4.1 PreferencePreference提供了一种轻量级的数据存取方法,应用场合主要是数据比较少的配置信息。
它以“键-值”(是一个Map)对的方式将数据保存在一个XML配置文件中。
4.1.1 Preference简介使用Preference方式来存取数据,要用到SharedPreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在android.content包中。
调用Context.getSharedPreferences( String name, int mode)方法可得到SharedPreferences接口,该方法的第一个参数是文件名称,第二个参数是操作模式。
操作模式有三种:MODE_PRIV ATE(私有)、MODE_WORLD_READABLE (可读)和MODE_WORLD_WRITEABLE(可写)。
SharedPreferences提供了获得数据的方法,如:getString、getInt等。
android sql查询语句

android sql查询语句Android中使用SQL查询语句可以对数据库进行操作,包括数据的增删改查等操作。
下面列举了10个常用的Android SQL查询语句。
1. 查询所有数据:```SELECT * FROM 表名;```这条语句可以查询指定表中的所有数据,并以表格形式返回。
2. 查询指定字段:```SELECT 字段1, 字段2 FROM 表名;```这条语句可以查询指定表中的指定字段,并以表格形式返回。
3. 条件查询:```SELECT * FROM 表名 WHERE 条件;```这条语句可以根据指定条件查询满足条件的数据,并以表格形式返回。
4. 模糊查询:SELECT * FROM 表名 WHERE 字段 LIKE '%关键字%';```这条语句可以根据指定字段中包含关键字的数据进行查询,并以表格形式返回。
5. 排序查询:```SELECT * FROM 表名 ORDER BY 字段 ASC/DESC;```这条语句可以根据指定字段进行升序(ASC)或降序(DESC)排序,并以表格形式返回。
6. 分组查询:```SELECT 字段, COUNT(*) FROM 表名 GROUP BY 字段;```这条语句可以根据指定字段进行分组,并统计每个分组中的数据数量,并以表格形式返回。
7. 连接查询:```SELECT 表1.字段, 表2.字段 FROM 表1 INNER JOIN 表2 ON 表1.关联字段 = 表2.关联字段;这条语句可以根据两个表之间的关联字段进行连接查询,并返回符合条件的数据。
8. 嵌套查询:```SELECT 字段 FROM 表名 WHERE 字段 IN (SELECT 字段 FROM 表名WHERE 条件);```这条语句可以在查询中嵌套一个子查询,并根据子查询的结果进行查询,并返回符合条件的数据。
9. 分页查询:```SELECT * FROM 表名 LIMIT 起始位置, 查询条数;```这条语句可以指定查询结果的起始位置和查询条数,实现分页查询。
androidstudio数据库查询语句

androidstudio数据库查询语句Android Studio是一种集成开发环境(IDE),用于开发Android应用程序。
在Android应用程序开发中,数据库查询是非常重要的一环。
本文将一步一步地回答关于Android Studio数据库查询语句的问题。
第一步:什么是数据库查询语句?数据库查询语句是一种用于从数据库中检索数据的命令。
它可以选择性地检索特定的数据,并可以对数据进行排序、过滤和聚合等操作。
数据库查询语句是通过使用SQL(结构化查询语言)编写的。
第二步:如何在Android Studio中执行数据库查询语句?在Android Studio中,可以使用SQLite数据库进行数据存储和查询。
SQLite 是一种轻量级的数据库引擎,适用于Android应用程序开发。
首先,在Android Studio中创建数据库。
可以使用SQLiteOpenHelper类来创建数据库和表,并在onCreate()方法中执行所需的数据库创建和初始化操作。
javapublic class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "mydatabase.db";private static final int DATABASE_VERSION = 1;public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");}...}然后,在需要执行数据库查询语句的地方,获取一个可读的数据库实例,并使用rawQuery()方法执行查询语句。
Android-Room数据库的使用方法教程

Android-Room数据库的使用方法教程Room是一个持久性数据库,提供了SQLite的抽象层,以便在充分利用SQLite的同时允许流畅的数据库访问。
这篇文章主要介绍了详细介绍Android-Room数据库的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一起跟随小编过来看看吧。
为什么会选择Room?前面我也说到了现在也有不少开源的数据库给大家使用,那为什么我们还要去学习使用这个库呢?当然不是我前面说的“正不正统”的原因了。
因为Room有下面几个优点:①SQL查询在编译时就会验证- 在编译时检查每个@Query和@Entity等,这就意味着没有任何运行时错误的风险可能会导致应用程序崩溃(并且它不仅检查语法问题,还会检查是否有该表)②较少的模板代码③与LiveData 集成该如何使用它?1、在app/build.gradle中添加以下依赖implementation 'android.arch.persistence.room:runtime:1.0.0'annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'你可以点击这里查看最新依赖版本号2、创建JavaBean@Entitypublic class User {@PrimaryKey(autoGenerate = true)//主键是否自动增长,默认为falseprivate int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) { this.age = age;}//这里的getter/setter方法是必须的}这里需要使用@Entity 来注解该类至少要有一个主键@PrimaryKey3、创建Dao接下来,需要为我们的实体创建DAO。
android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查

android中SQLite的使用总结,用excSQL和rawQuery方法实现一般得增删改查1:androidmanifest.xml的内容[html]view plaincopy1.<?xml version="1.0" encoding="utf-8"?>2.<manifest xmlns:android="/apk/res/android"3.package="cn.itcast.db"4.android:versionCode="1"5.android:versionName="1.0">6.<application android:icon="@drawable/icon" android:lab el="@string/app_name">7.<uses-library android:name="android.test.runner" />8.<activity android:name=".MainActivity"9.android:label="@string/app_name">10.<intent-filter>11.<action android:name="android.intent.action.MAIN" / >12.<category android:name=" UNCHER" />13.</intent-filter>14.</activity>15.16.</application>17.18.<uses-sdk android:minSdkVersion="8" />19.<!-- 配置测试环境 -->20.<instrumentation android:name="android.test.Instru mentationTestRunner"21.android:targetPackage="cn.itcast.db"22.android:label="T est for My App"/>23.24.</manifest>2:Person类[java]view plaincopy1.package cn.itcast.domain;2.3.public class Person {4.5.private Integer id;6.private String name;7.8.public Person() {9.10.}11.12.public Integer getId() {13.return id;14.}15.16.public void setId(Integer id) {17.this.id = id;18.}19.20.public String getName() {21.return name;22.}23.24.public void setName(String name) { = name;26.}27.28.@Override29.public String toString() {30.return "Person [id=" + id + ", name=" + name + "]";31.}32.33.}3:DBOpenHelper类,该类继承了SQLiteOpenHelper类[java]view plaincopy1.package cn.itcast.service;2.3.import android.content.Context;4.import android.database.sqlite.SQLiteDatabase;5.import android.database.sqlite.SQLiteOpenHelper;6.import android.database.sqlite.SQLiteDatabase.CursorFac tory;7.8.public class DBOpenHelper extends SQLiteOpenHelper {9.10.private static final String DATABASENAME = "cn.itcast. db";11.private static final int DATABASEVERSION = 1;12.13./*14.* 构造函数15.*/16.public DBOpenHelper(Context context) {17.super(context, DATABASENAME, null, DATABASEVERSION);18.}19.20./*21.* 数据库第一次生成时调用该方法,创建一些表或者初始化一些数据22.* @see android.database.sqlite.SQLiteOpenHelper#on Create(android.database.sqlite.SQLiteDatabase)23.*/24.@Override25.public void onCreate(SQLiteDatabase db) {26.db.execSQL("create table person(personid integer pri mary key autoincrement, name varchar(20))");27.}28.29.@Override30.public void onUpgrade(SQLiteDatabase db, int oldVer sion, int newVersion) {31.32.}33.34.}4:PersonService类[java]view plaincopy1.package cn.itcast.service;2.3.import java.util.ArrayList;4.import java.util.List;5.6.import android.content.Context;7.import android.database.Cursor;8.import android.database.sqlite.SQLiteDatabase;9.import cn.itcast.domain.Person;10.11.public class PersonService {12.13.private DBOpenHelper dbOpenHelper;14.15.public PersonService(Context context) {16.this.dbOpenHelper = new DBOpenHelper(context);17.}18.19./*20.* save a person to the database21.*/22.public void save(Person person) {23.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();24.database.execSQL("insert into person(name) values (?) ", new Object[]{person.getName()});25.}26.27./*28.* updata a person to the database29.*/30.public void update(Person person) {31.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();32.database.execSQL("update person set name=? wherepersonid=?", new Object[]{person.getName(), person.getId()});33.}34.35./*36.* delete a person from the database according to the id37.*/38.public void delete(Integer id) {39.SQLiteDatabase database = dbOpenHelper.getWritabl eDatabase();40.database.execSQL("delete from person where personi d=?", new Object[]{id.toString()});41.}42.43./*44.* find a person from the database according to the id45.*/46.public Person find(Integer id) {47.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();48.Cursor cursor = database.rawQuery("select * from per son where personid=?", new String[]{id.toString()});49.Person person = null;50.if(cursor.moveT oFirst()) {51.Integer personid = cursor.getInt(cursor.getColumnInd ex("personid"));52.String name = cursor.getString(cursor.getColumnIndex ("name"));53.person = new Person();54.person.setId(personid);56.}57.return person;58.}59.60./*61.* get the data of person accroding to the offset and m axResult62.*/63.public List<Person> getScrollData(Integer offset, Integ er maxResult) {64.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();65.Cursor cursor = database.rawQuery("select * from per son limit ?,?", new String[] {offset.toString(), maxResult.toString() });66.int idIndex = 0;67.int nameIndex = 0;68.List<Person> personList = null;69.70.if(cursor.getCount() >= 0) {71.idIndex = cursor.getColumnIndex("personid");Index = cursor.getColumnIndex("name");73.personList = new ArrayList<Person>();74.}75.76.while(cursor.moveToNext()) {77.Integer personid = cursor.getInt(idIndex);78.String name = cursor.getString(nameIndex);79.Person person = new Person();81.person.setName(name);82.personList.add(person);83.}84.return personList;85.}86.87./*88.* get the count of the database89.*/90.public long getCount(){91.SQLiteDatabase database = dbOpenHelper.getReadab leDatabase();92.Cursor cursor = database.rawQuery("select count(*) fr om person", null);93.cursor.moveToFirst();94.return cursor.getLong(0);95.}96.97.}5:PersonServiceT est类[java]view plaincopy1.package cn.itcast.db;2.3.import java.util.List;4.5.import android.test.AndroidTestCase;6.import android.util.Log;7.import cn.itcast.domain.Person;8.import cn.itcast.service.DBOpenHelper;9.import cn.itcast.service.PersonService;10.11.public class PersonServiceTest extends AndroidT estCase {12.private static final String TAG = "PersonServiceTest";13.14./*15.* 测试生成数据库的方法16.*/17.public void testCreateDB() throws Throwable {18.DBOpenHelper dbOpenHelper = new DBOpenHelper( this.getContext());19.dbOpenHelper.getWritableDatabase(); //第一次调用该方法会生成数据库20.21.}22.23./*24.* 测试保存方法25.*/26.public void testSave() throws Throwable{27.PersonService personService = new PersonService(this .getContext());28.29.Person person1 = new Person();30.person1.setName("zhangsan");31.personService.save(person1);32.33.Person person2 = new Person();34.person2.setName("lisi");35.personService.save(person2);36.37.Person person3 = new Person();38.person3.setName("wangwu");39.personService.save(person3);40.41.}42.43.public void testDelete() {44.PersonService personService = new PersonService(this .getContext());45.personService.delete(1);46.47.}48.49./*50.* 测试更新方法51.*/52.public void testUpdate() {53.PersonService personService = new PersonService(this .getContext());54.Person person = personService.find(1);55.person.setName("zhaoliu");56.personService.update(person);57.58.}59.60./*61.* 测试获得数据方法63.public void testGetScrollData() throws Throwable{64.PersonService personService = new PersonService(this .getContext());65.List<Person> persons = personService.getScrollData(0 , 3);66.for(Person person : persons) {67.Log.i(TAG, person.toString());68.}69.}70.71./*72.* 测试根据id查找的方法73.*/74.public void testFind() throws Throwable{75.PersonService personService = new PersonService(this .getContext());76.Person person = personService.find(1);77.Log.i(TAG, person.toString());78.79.}80.81./*82.* 测试获得数量的方法83.*/84.public void testGetCount() {85.PersonService personService = new PersonService(this .getContext());86.long count = personService.getCount();87.Log.i(TAG, count + "");89.}。
在Android应用中利用SQLite进行本地数据库操作

在Android应用中利用SQLite进行本地数据库操作随着移动应用的不断发展,电子设备成为人们生活中不可或缺的一部分。
而Android操作系统作为最广泛使用的移动操作系统之一,它提供了强大的开发平台,为开发者们提供了各种各样的开发工具和API。
其中,SQLite作为Android应用中的一种轻量级数据库管理系统,被广泛应用于数据存储和管理。
本文将介绍在Android应用中通过SQLite实现本地数据库操作的方法。
1. 简介SQLite是一种无服务器的自包含的数据库引擎,它在Android操作系统中作为默认的关系型数据库引擎。
它无需独立的服务器进程,将数据库引擎与应用程序合并在一起,使得应用程序可以直接操作数据库。
SQLite在移动设备上非常流行,因为它占用的磁盘空间相对较少,并且提供了性能高效的操作方式。
2. 创建数据库在Android应用中使用SQLite进行本地数据库操作,首先需要创建一个数据库。
Android提供了SQLiteOpenHelper类来管理数据库的创建和升级。
在创建数据库之前,首先需要定义数据库的结构,包括表的结构和字段信息。
接着,通过继承SQLiteOpenHelper类,重写onCreate()方法和onUpgrade()方法,可以自动创建数据库和升级数据库。
3. 创建表使用SQLite进行本地数据库操作时,需要在数据库中创建表来存储数据。
通过执行SQL语句,可以在数据库中创建表以及定义表中的字段信息。
SQLite支持多种数据类型,包括整型、浮点型、文本型等。
通过在SQL语句中指定字段的名称和类型,可以创建适合应用需求的表。
4. 插入数据插入数据是在数据库中进行本地数据库操作的常见操作之一。
通过执行SQL 语句的INSERT INTO语句,可以将数据插入到数据库的表中。
通过使用ContentValues类,可以方便地设置插入数据的字段值。
通过调用SQLiteDatabase 类的insert()方法,可以执行插入数据的操作。
android sqlite query方法

android sqlite query方法在Android开发中,使用SQLite数据库进行查询是一个常见的操作。
下面是一个简单的例子,展示如何在Android中执行一个SQLite查询:1. 创建数据库助手类:首先,你需要创建一个帮助类来管理你的数据库。
这个类通常会包含创建数据库、打开数据库和执行查询的方法。
2. 定义表格:在数据库中定义一个表格。
例如,你可以创建一个名为`Users`的表格,其中包含`id`, `name`, 和`age`字段。
3. 执行查询:使用`SQLiteDatabase`的`query`方法来执行查询。
这个方法需要指定表名、列名、筛选条件等。
4. 处理结果:查询结果通常会返回一个`Cursor`对象。
你可以遍历这个对象来获取查询到的数据。
下面是一个示例代码,展示如何在Android中执行一个简单的SQLite查询:```javaimport ;import ;import ;import ;import ;public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "";private static final int DATABASE_VERSION = 1;private static final String TABLE_NAME = "Users";private static final String COLUMN_ID = "id";private static final String COLUMN_NAME = "name";private static final String COLUMN_AGE = "age";private static final String COLUMN_CREATED_AT = "created_at";public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION); }Overridepublic void onCreate(SQLiteDatabase db) {String createTableQuery = "CREATE TABLE " + TABLE_NAME + " (" +COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +COLUMN_NAME + " TEXT, " +COLUMN_AGE + " INTEGER, " +COLUMN_CREATED_AT + " DATETIME DEFAULT CURRENT_TIMESTAMP" +");";(createTableQuery);}Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {("DROP TABLE IF EXISTS " + TABLE_NAME);onCreate(db);}public void addUser(String name, int age) {SQLiteDatabase db = ();ContentValues contentValues = new ContentValues();(COLUMN_NAME, name);(COLUMN_AGE, age);(TABLE_NAME, null, contentValues);();}public Cursor getUsers() {SQLiteDatabase db = ();String selectQuery = "SELECT FROM " + TABLE_NAME;Cursor cursor = (TABLE_NAME, null, null, null, null, null, null); return cursor;}}```在上面的代码中,我们定义了一个`DatabaseHelper`类,它包含了创建数据库、添加用户和查询用户的方法。
Android开发基础(习题卷1)

Android开发基础(习题卷1)第1部分:单项选择题,共71题,每题只有一个正确答案,多选或少选均不得分。
1.[单选题]关于res/raw目录说法正确的是( )A)这里的文件是原封不动的存储到设备上不会转变为二进制的格式B)这里的文件是原封不动的存储到设备上会转变为二进制的格式C)这里的文件最终以二进制的格式存储到指定的包中D)这里的文件最终不会已二进制的格式存储到指定的包中答案:A解析:2.[单选题]下列代码输出的结果是:( )int i = 0;i = ++i + 8;Console.WriteLine(i++);A)8B)9C)10D)编译出现语法错误,不能运行答案:B解析:i = ++i + 8; 结果为9i++是先输出后加,所以为93.[单选题]查询手机系统短信时,内容提供者对应的 Uri 为( )。
A)Contacts.Photos.CONTENT_URIB)Contacts.People.CONTENT_URIC)"content://sms/"D)Media.EXTERNAL_CONTENT_URI答案:C解析:4.[单选题]在多个应用中读取共享存储数据时,需要用到的query 方法,是哪个对象的方法( )A)ContentResolverB)ContentProviderC)CursorD)SQLiteHelper答案:A解析:5.[单选题]以下哪个不是应用间交互常用的方法? ()A)接收Broadcast 的消息B)文件共享访问C)通过Content Resolver 接口访问D)Activity 的调用6.[单选题]下面关于广播叙述错误的是( )A)广播是Android 四大组件之一B)BroadcastReceiver 有两种注册方式,静态注册和动态注册C)静态注册需要在Mainfest.xml 中配置D)动态注册需要在应用退出时候接触广播的注册。
答案:A解析:7.[单选题]若要实现对系统联系人的增删改查,需要使用的系统ContentProvider的Uri为( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
}ቤተ መጻሕፍቲ ባይዱ
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name=?", // selection
new String[] {name}, //selectionArgs
Android中数据库查询方法query()中的select
Android中涉及数据库查询的地方一般都会有一个query()方法,而这些query中有大都(全部?)会有一个参数selectionArgs,比如下面这个android.database.sqlite.SQLiteDatabase.query():
手工处理转义的话,也不麻烦,就是String.replace()调用而已。但是Android SDK为我们准备了selectionArgs来专门处理这种问题:
view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
selection参数很好理解,就是SQL语句中WHERE后面的部分,即过滤条件,比如可以为id=3 AND name='Kevin Yuan'表示只返回满足id为3且name为"Kevin Yuan"的记录。
null, // columns
"? = " + id + " AND name=?", // selection XXXX错误!?不能用来替换字段名
new String[]{"id", name}, //selectionArgs
//......更多参数省略
);
// ......更多代码
}
null, // columns
"id=" + id + " AND name='" + name + "'", // selection
//......更多参数省略
);
}
在这种情况下就要考虑一个字符转义的问题,比如如果在上面代码中传进来的name参数的内容里面有单引号('),就会引发一个"SQLiteException syntax error ...."。
不过需要注意的是?并不是“万金油”,只能用在原本应该是字符串出现的地方。比如下面的用法是错误的:
view plaincopy to clipboardprint?
public void doQuery(long id, final String name) {
mDb.query("some_table", // table name
//......更多参数省略
);
// ......更多代码
}
也就是说我们在selection中需要嵌入字符串的地方用?代替,然后在selectionArgs中依次提供各个用于替换的值就可以了。在query()执行时会对selectionArgs中的字符串正确转义并替换到对应的?处以构成完整的selection字符串。有点像String.format()。
mDb.query("some_table", // table name
null, // columns
"id=" + id + " AND name=?", // selection
new String[] {name}, //selectionArgs
//......更多参数省略
);
// ......更多代码
null, // columns
"id=" + id + " AND name='" + name + "'", // selection
//......更多参数省略
);
}
public doQuery(long id, final String name) {
mDb.query("some_table", // table name
再实际项目中像上面那样简单的“静态”的selection并不多见,更多的情况下要在运行时动态生成这个字符串,比如
view plaincopy to clipboardprint?
public doQuery(long id, final String name) {
mDb.query("some_table", // table name