Android 中数据库查询方法 query

合集下载

第4章 Android中的数据存储

第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查询语句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数据库查询语句

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数据库的使用方法教程

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方法实现一般得增删改查

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应用中利用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 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)

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.android底层是基于什么操作系统()a、 javab、macosc、windowsd、linux2.android开发环境中ddms是dalvikdebugmonitorservice,下面关于它为我们提供的功能,描述错误的是()a、 Logcat显示输出调试信息B.模拟电话呼叫C.接收短信d.显示模拟器启动信息,加载程序等信息3.安装和配置Android开发环境时需要使用的eclipse插件有()a、jdkb、eclipseC、Android sdkd和Android ADT4.android下的单元测试要配置,以下说法正确的是()a、必须导入junit的jar包b、在Android manifest Instrumentationc中,它是在XML的manifest节点下配置的,而Android manifest。

XML中的XML,在应用程序节点和Android清单下配置instrumented。

在XML中的应用程序节点下配置的uses库和测试类需要继承Android testcase类5.android项目中的布局文件放在哪个目录下()a、res/layoutb、res/valuec、assetsd、res/drawable6.在Android应用程序中可以使用哪些方法存储数据(a、文件B、SQLite)c、sharedpreferenced、contentprovider7.要通过ADB命令查看连接的设备,正确的设备包括()a、adbdeviceb、adbshowdevicesc、adbstartdevicesd和adbhavedevices8关于的说法下列正确的是()a,在gridview里面表示一行b,是五种布局的一种c、标签D表示表格布局中的一行和listview中的一行9.androidlog.w()-1-a、调试b、信息c、警告d、错误10.使用pull解析器时,包括哪些事件类型:A和end_uuDocumentB、start_uuuElementC、start_uuuTagd、texte、attributef、end_text11.在Android解析XML的方法中,将整个文件加载到内存进行解析的方法是什么?a、saxb、pullc、domd、json12.在android中对数据库的表进行查询操作用sqlitedatabase类中的那两个方法进行查询:a、 Insert()和rawquery()b.query()和execsql()c.query()和rawquery ()d.query()和update()13.关于sqlite数据库,不正确的说法a、 Sqliteopenhelper类主要用于创建和更新数据库。

Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解

Android操作SQLite数据库(增、删、改、查、分页等)及ListView显示数据的方法详解

Android操作SQLite数据库(增、删、改、查、分页等)及ListView显⽰数据的⽅法详解本⽂实例讲述了Android操作SQLite数据库(增、删、改、查、分页等)及ListView显⽰数据的⽅法。

分享给⼤家供⼤家参考,具体如下:由于刚接触android开发,故此想把学到的基础知识记录⼀下,以备查询,故此写的⽐较啰嗦:步骤如下:⼀、介绍:此⽂主要是介绍怎么使⽤android⾃带的数据库SQLite,以及把后台的数据⽤ListView控件显⽰⼆、新建⼀个android⼯程——DBSQLiteOperate⼯程⽬录:三、清单列表AndroidManifest.xml的配置为:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.example.dboperate"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8" /><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name" ><!--单元测试加这句--><uses-library android:name="android.test.runner" /><activityandroid:name=".DBSQLiteOperateActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity></application><instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="com.example.dboperate"android:label="Test for my app"/></manifest>四、main.xml配置清单:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextViewandroid:id="@+id/name"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/name"android:gravity="center"/><TextViewandroid:id="@+id/phone"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/phone"android:gravity="center"/><TextViewandroid:id="@+id/amount"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/amount"android:gravity="center"/></LinearLayout><ListViewandroid:id="@+id/listView"android:layout_width="fill_parent"android:layout_height="fill_parent" ></ListView></LinearLayout>五、item.xml配置清单:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal" ><TextViewandroid:id="@+id/name"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/name"android:gravity="center"/><TextViewandroid:id="@+id/phone"android:layout_width="100dip"android:layout_height="wrap_content"android:text="@string/phone"android:gravity="center"/><TextViewandroid:id="@+id/amount"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/amount"android:gravity="center"/></LinearLayout>六、string.xml配置清单:<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, DBSQLiteOperateActivity!</string><string name="app_name">ExampleDBSQLiteOperate8</string><string name="name">姓名</string><string name="phone">电话</string><string name="amount">存款</string></resources>七、DBSQLiteOperateActivity.java Activity类的源码:package com.example.dboperate;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.example.adapter.PersonAdapter;import com.example.domain.Person;import com.example.service.PersonService;import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.SimpleCursorAdapter;import android.widget.Toast;public class DBSQLiteOperateActivity extends Activity {ListView listView;PersonService personService;OnItemClickListener listViewListener;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);listViewListener = new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//得到listView控件ListView listView = (ListView)parent;//1、如果使⽤⾃定义适配器,返回的是Person对象//得到该条⽬数据// Person person = (Person)listView.getItemAtPosition(position);// //⼴播出去// Toast.makeText(getApplicationContext(), person.toString(), Toast.LENGTH_LONG).show(); //2、如果使⽤showList2()⽅法中的适配器时,则取得的值是不⼀样的,返回的是cursor// Cursor cursor = (Cursor)listView.getItemAtPosition(position);// int personid = cursor.getInt(cursor.getColumnIndex("_id"));// Toast.makeText(getApplicationContext(), personid+"", Toast.LENGTH_LONG).show();//3、如果使⽤showList()⽅法中的适配器时,则取得的值是不⼀样的,返回的是map@SuppressWarnings("unchecked")Map<String,Object> map = (Map)listView.getItemAtPosition(position);String name = map.get("name").toString();String personid = map.get("personid").toString();Toast.makeText(getApplicationContext(), personid +"-"+ name, Toast.LENGTH_LONG).show(); }};listView = (ListView) this.findViewById(R.id.listView);listView.setOnItemClickListener(listViewListener);personService = new PersonService(this);showList();}private void showList() {List<Person> persons = personService.getScrollData(0, 50);List<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();for(Person person : persons){HashMap<String,Object> item = new HashMap<String,Object>();item.put("name", person.getName());item.put("phone", person.getPhone());item.put("amount", person.getAmount());item.put("personid", person.getId());data.add(item);}SimpleAdapter adapter = new SimpleAdapter(this,data,yout.item, new String[]{"name","phone","amount"}, new int[]{,R.id.phone,R.id.amount});listView.setAdapter(adapter);}public void showList2(){Cursor cursor = personService.getCursorScrollData(0, 50);//该适配器要求返回的结果集cursor必须包含_id字段,所以需要对取得结果集进⾏处理SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,yout.item,cursor,new String[]{"name","phone","amount"}, new int[]{,R.id.phone,R.id.amount} ); listView.setAdapter(adapter);}/*** ⾃定义适配器*/public void showList3(){List<Person> persons = personService.getScrollData(0, 50);/*** 第⼀个参数:上下⽂context,第⼆个参数:要显⽰的数据,第三个参数:绑定的条⽬界⾯*/PersonAdapter adapter = new PersonAdapter(this, persons, yout.item);listView.setAdapter(adapter);}}⼋、person.java 实体类源码:package com.example.domain;public class Person {private Integer id;private String name;private String phone;private Integer amount;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Person(String name, String phone) { = name;this.phone = phone;}public Person(Integer id, String name, String phone,Integer amount) {super();this.id = id; = name;this.phone = phone;this.amount = amount;}public Person() {super();}public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount = amount;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", phone=" + phone+ ", amount=" + amount + "]";}}九、DBOperateHelper.java 业务类源码:package com.example.service;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOperateHelper extends SQLiteOpenHelper {public DBOperateHelper(Context context) {//默认创建的数据库⽂件保存在<包名>/database///第⼀个参数是上下⽂,第⼆个参数是数据库名称,第三个是游标⼯⼚为null时使⽤数据库默认的游标⼯⼚,第四个是数据库版本号但是不能为0,⼀般⼤于0super(context, "smallpig", null, 4);}/*** 数据库每⼀次被创建时被调⽤*/@Overridepublic void onCreate(SQLiteDatabase sqldb) {sqldb.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),phone varchar(12) null)");}/*** 每⼀次数据库版本号发⽣变动时触发此⽅法* ⽐如如果想往数据库中再插⼊⼀些表、字段或者其他信息时通过修改数据库版本号来触发此⽅法*/@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//db.execSQL("alter table person add phone varchar(12) null");\db.execSQL("alter table person add amount Integer null");}}⼗、PersonService.java 业务类源码:package com.example.service;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.domain.Person;public class PersonService {private DBOperateHelper dbOperateHelper;public PersonService(Context context) {this.dbOperateHelper = new DBOperateHelper(context);}/*** 保存记录* @param person*/public void save(Person person){//得到数据库实例,⾥⾯封装了数据库操作⽅法SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("insert into person(name,phone) values('"+person.getName()+"','"+person.getPhone()+"')");//利⽤占位符可以避免注⼊,但是注意数组参与与占位符对应的字段要⼀⼀对应sqldb.execSQL("insert into person(name,phone,amount) values(?,?,?)",new Object[]{person.getName(),person.getPhone(),person.getAmount()});//关闭数据库sqldb.close();}/*** 删除记录* @param id*/public void delete(Integer id){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.execSQL("delete from person where personid=?",new Object[]{id});sqldb.close();}/*** 更新记录* @param person*/public void update(Person person){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.execSQL("update person set name=?,phone=?,amount=? where personid=?",new Object[]{person.getName(),person.getPhone(),person.getAmount(),person.getId()}); sqldb.close();}/*** 通过ID查询记录* @param id* @return*/public Person find(Integer id){/*** getWritableDatabase 与 getReadableDatabase 的区别:* getReadableDatabase会先返回getWritableDatabase(可写),如果调⽤getWritableDatabase失败* 则才会调⽤getReadableDatabase后续⽅法,使数据库只读* 当写⼊的数据超过数据库⼤⼩则调⽤getWritableDatabase会失败* 所以只读时则可以使⽤此⽅法,其它情况(只要不是超过数据库⼤⼩)也可以使⽤此⽅法*/SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});int personid;String name;String phone;int amount;Person person = null;if(cursor.moveToFirst()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);}cursor.close();return person;}/*** 返回指定长度记录,limit 3,5,适⽤于分页* @param offset 起始* @param maxResult 长度* @return*/public List<Person> getScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)});int personid;String name;String phone;int amount;Person person = null;List<Person> persons = new ArrayList<Person>();while(cursor.moveToNext()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);persons.add(person);}cursor.close();return persons;}/*** 返回cursor* @param offset 起始* @param maxResult 长度* @return*/public Cursor getCursorScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select personid as _id,name,phone,amount from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); return cursor;}/*** 返回总记录数* @return*/public long getCount(){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();Cursor cursor = sqldb.rawQuery("select count(*) from person", null);//该查询语句值返回⼀条语句cursor.moveToFirst();long result = cursor.getLong(0);cursor.close();return result;}public void payment(){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();sqldb.beginTransaction();//开启事务try{sqldb.execSQL("update person set amount = amount -10 where personid=1");sqldb.execSQL("update person set amount = amount + 10 where personid=2");sqldb.setTransactionSuccessful();//设置事务标志位true} finally {//结束事务:有两种情况:commit\rollback,事务提交或者回滚是由事务的标识决定的//事务为ture则提交,事务为flase则回滚,默认为falsesqldb.endTransaction();}}}⼗⼀、OtherPersonService.java 业务类源码:package com.example.service;import java.util.ArrayList;import java.util.List;import com.example.domain.Person;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class OtherPersonService {private DBOperateHelper dbOperateHelper;public OtherPersonService(Context context) {this.dbOperateHelper = new DBOperateHelper(context);}/*** 保存记录* @param person*/public void save(Person person){//得到数据库实例,⾥⾯封装了数据库操作⽅法SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("insert into person(name,phone) values('"+person.getName()+"','"+person.getPhone()+"')");//利⽤占位符可以避免注⼊,但是注意数组参与与占位符对应的字段要⼀⼀对应//sqldb.execSQL("insert into person(name,phone) values(?,?)",new Object[]{person.getName(),person.getPhone()});ContentValues values = new ContentValues();values.put("name", person.getName());values.put("phone", person.getPhone());values.put("amount", person.getAmount());//第⼀个参数是表名,第三个为字段值集合,第⼆个参数是空值字段,当第三个字段值集合为空时,系统会⾃动插⼊⼀条第⼆个参数为空的sql语句//否则当第三个参数为空时,如果第⼆个参数也为空,那么插⼊表就会找不到插⼊的字段信息,会报错sqldb.insert("person", "name", values );//关闭数据库sqldb.close();}/*** 删除记录* @param id*/public void delete(Integer id){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("delete from person where personid=?",new Object[]{id});//第⼀个参数是表名,第⼆个是where后⾯的条件⽤占位符表⽰,第三个对应占位符为参数值sqldb.delete("person", "personid=?", new String[]{Integer.toString(id)});sqldb.close();}/*** 更新记录* @param person*/public void update(Person person){SQLiteDatabase sqldb = dbOperateHelper.getWritableDatabase();//sqldb.execSQL("update person set name=?,phone=? where personid=?",new Object[]{person.getName(),person.getPhone(),person.getId()});//第⼀个参数为表名,第⼆个是⼀个更新值集合,采⽤键值对的形式,每个更新的字段对应更新值//第三个参数是where后⾯条件字段⽤占位符标识,第四个参数是对应where占位符的值ContentValues values = new ContentValues();values.put("name", person.getName());values.put("phone", person.getPhone());values.put("amount", person.getAmount());sqldb.update("person", values , "personid=?", new String[]{person.getId().toString()});sqldb.close();}/*** 通过ID查询记录* @param id* @return*/public Person find(Integer id){/*** getWritableDatabase 与 getReadableDatabase 的区别:* getReadableDatabase会先返回getWritableDatabase(可写),如果调⽤getWritableDatabase失败* 则才会调⽤getReadableDatabase后续⽅法,使数据库只读* 当写⼊的数据超过数据库⼤⼩则调⽤getWritableDatabase会失败* 所以只读时则可以使⽤此⽅法,其它情况(只要不是超过数据库⼤⼩)也可以使⽤此⽅法*/SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});//第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件Cursor cursor = sqldb.query("person", null, "personid=?", new String[]{id.toString()}, null, null, null);int personid;String name;String phone;int amount;Person person = null;if(cursor.moveToFirst()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);}cursor.close();return person;}/*** 返回指定长度记录,limit 3,5,适⽤于分页* @param offset 起始* @param maxResult 长度* @return*/public List<Person> getScrollData(int offset,int maxResult){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); //第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件//第⼋个参数是limit ?,? 条件Cursor cursor = sqldb.query("person", null, null, null, null, null, "personid",offset+","+maxResult); int personid;String name;String phone;int amount;Person person = null;List<Person> persons = new ArrayList<Person>();while(cursor.moveToNext()){personid = cursor.getInt(cursor.getColumnIndex("personid"));name = cursor.getString(cursor.getColumnIndex("name"));phone = cursor.getString(cursor.getColumnIndex("phone"));amount = cursor.getInt(cursor.getColumnIndex("amount"));person = new Person(personid,name,phone,amount);persons.add(person);}cursor.close();return persons;}/*** 返回总记录数* @return*/public long getCount(){SQLiteDatabase sqldb = dbOperateHelper.getReadableDatabase();//Cursor cursor = sqldb.rawQuery("select count(*) from person", null);//第⼀个参数是表名;第⼆个参数是查询显⽰的字段,null时默认查询显⽰所有字段;//第三个参数是where查询条件占位符;第四个是占位符对应的值;//第五个参数是group by条件;第六个是having条件;第七个是order by条件Cursor cursor = sqldb.query("person", new String[]{"count(*)"}, null, null, null, null, null);//该查询语句值返回⼀条语句cursor.moveToFirst();long result = cursor.getLong(0);cursor.close();return result;}}⼗⼆、PersonServiceTest.java 单元测试类源码:package com.example.test;import java.util.List;import com.example.domain.Person;import com.example.service.DBOperateHelper;import com.example.service.PersonService;import android.test.AndroidTestCase;import android.util.Log;public class PersonServiceTest extends AndroidTestCase {public void testCreateDB() throws Exception{DBOperateHelper dbHelper = new DBOperateHelper(getContext());dbHelper.getWritableDatabase();}public void testSave() throws Exception{PersonService ps = new PersonService(getContext());for(int i=1;i<=100;i++){Person person = new Person();person.setName("我是"+i);person.setPhone(String.valueOf(Long.parseLong("188********")+i));ps.save(person);Log.i("PersonService",person.toString());}}public void testDelete() throws Exception{PersonService ps = new PersonService(getContext());ps.delete(10);}public void testUpdate() throws Exception{PersonService ps = new PersonService(getContext());ps.update(new Person(1,"xiaopang","188********",0));}public void testFind() throws Exception{PersonService ps = new PersonService(getContext());Person person = ps.find(1);Log.i("PersonService", person.toString());}public void testGetScrollData() throws Exception{PersonService ps = new PersonService(getContext());List<Person> persons = ps.getScrollData(3, 5);for(Person person:persons){Log.i("PersonService",person.toString());}}public void testGetCount() throws Exception{PersonService ps = new PersonService(getContext());Long count = ps.getCount();Log.i("PersonService",count.toString());}public void testUpdateAmount() throws Exception{PersonService ps = new PersonService(getContext());Person person1 = ps.find(1);Person person2 = ps.find(2);person1.setAmount(100);person2.setAmount(100);ps.update(person1);ps.update(person2);}public void testPayment() throws Exception{PersonService ps = new PersonService(getContext());ps.payment();}}⼗三、OtherPersonServiceTest 单元测试类源码:package com.example.test;import java.util.List;import com.example.domain.Person;import com.example.service.DBOperateHelper;import com.example.service.OtherPersonService;import android.test.AndroidTestCase;import android.util.Log;public class OtherPersonServiceTest extends AndroidTestCase {public void testCreateDB() throws Exception{DBOperateHelper dbHelper = new DBOperateHelper(getContext());dbHelper.getWritableDatabase();}public void testSave() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());for(int i=1;i<=100;i++){Person person = new Person();person.setName("我是"+i);person.setPhone(String.valueOf(Long.parseLong("188********")+i));ps.save(person);Log.i("PersonService",person.toString());}}public void testDelete() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());ps.delete(10);}public void testUpdate() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());ps.update(new Person(1,"xiaopang","188********",0));}public void testFind() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());Person person = ps.find(1);Log.i("PersonService", person.toString());}public void testGetScrollData() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());List<Person> persons = ps.getScrollData(3, 5);for(Person person:persons){Log.i("PersonService",person.toString());}}public void testGetCount() throws Exception{OtherPersonService ps = new OtherPersonService(getContext());Long count = ps.getCount();Log.i("PersonService",count.toString());}}⼗四、注意事项以及相关知识点:1、掌握SQLite数据库如何创建数据库、建⽴表、维护字段等操作继承SQLiteOpenHelper类,构造函数调⽤⽗类构造函数创建数据库,利⽤onCreate创建表,利⽤onUpgrade更新表字段信息2、掌握SQLite数据库如何增、删、改、查以及分页取得SQLiteDatabase的实例,然后调⽤该实例的⽅法可以完成上述操作SQLiteDataBase提供两种操作上述功能的⽅式:⼀是直接调⽤execSQL书写sql语句,另⼀种是通过insert、update、delete、query等⽅法来传值来拼接sql,前⼀种适合熟练掌握sql 语句的3、对需要数据同步的处理请添加事务处理,熟悉事务的处理⽅式4、了解各个⽅法参数的意义以及传值5、掌握ListView显⽰后台数据的使⽤⽅法SimpleAdapter、SimpleCursorAdapter以及⾃定义适配器的使⽤,以及OnItemClickListener取值时各个适配器返回值的区别以及取值⽅法6、多学、多记、多练、多思,加油!更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Android程序设计有所帮助。

AndroidSQLite数据库增删改查操作

AndroidSQLite数据库增删改查操作

AndroidSQLite数据库增删改查操作⼀、使⽤嵌⼊式关系型SQLite数据库存储数据在Android平台上,集成了⼀个嵌⼊式关系型数据库——SQLite,SQLite3⽀持NULL、INTEGER、REAL(浮点数字)、 TEXT(字符串⽂本)和BLOB(⼆进制对象)数据类型,虽然它⽀持的类型只有五种,但实际上sqlite3也接受varchar(n)、 char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。

SQLite最⼤的特点是你可以把各种类型的数据保存到任何字段中,⽽不⽤关⼼字段声明的数据类型是什么。

例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放⽇期型值。

但有⼀种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产⽣错误。

另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后⾯的数据类型信息,如下⾯语句你可以省略name字段的类型信息:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))SQLite可以解析⼤部分标准SQL语句,如:查询语句:select * from表名where条件⼦句 group by 分组字句 having ... order by 排序⼦句如:select * from personselect * from person order by id descselect name from person group by name having count(*)>1分页SQL与mysql类似,下⾯SQL语句获取5条记录,跳过前⾯3条记录select * from Account limit 5 offset 3或者select * from Account limit 3,5插⼊语句:insert into 表名(字段列表) values(值列表)。

android基础第一次考试题

android基础第一次考试题

1。

Dalvik虚拟机属于Android系统架构中的哪一层()A、应用层B、应用框架层C、系统运行库层D、Linux内核层2.Android中的短信、联系人管理、浏览器等属于Android系统架构中的哪一层()A、应用层B、应用框架层C、系统运行库层D、Linux内核层3。

下面在安装配置android开发环境时对android—ADT的描述错误的是( )A、是用于开发Android的Eclipse插件;B、ADT想要在Eclipse上正常使用的关键是它们的版本要兼容。

C、推荐在线安装ADT插件是因为,它会根据Eclipse版本自动找到能够适应的版本的D、不安装ADT也丝毫不影响在Eclipse下开发调试Android应用程序。

4.Android项目中放置常量的string。

xml位于哪个目录下()A, res/layout B,layout C,res/values D,assets5。

Android 项目工程下面的assets 目录的作用是什么A、放置应用到的图片资源。

Res/drawableB、主要放置一些文件资源,这些文件会被原封不动打包到apk 里面C、放置字符串,颜色,数组等常量数据res/valuesD、放置一些与UI 相应的布局文件,都是xml 文件res/layout6。

通过adb命令来安装一个apk文件,应该是:A、adb install xxx。

apkB、adb open xxx.apkC、adb push xxx.apkD、adb pull xxx。

apk7。

要通过adb命令查看已连接的设备,正确的是()A, adb devicesB, adb show devicesC, adb start devicesD, adb have devices8.将文件从电脑上拷贝到手机上,下面adb命令正确的是<a〉是手机路径,<b〉是电脑路径()A,adb push <b> <a〉B,adb pull 〈b> 〈a>C,adb pull 〈a〉<b>D,adb push 〈a〉<b>9.Android查看应用程序日志的工具是A、logcatB、consoleC、ddmsD、tomcat10。

[AndroidPro]完美AndroidCursor使用例子(Android数据库操作)

[AndroidPro]完美AndroidCursor使用例子(Android数据库操作)

[AndroidPro]完美AndroidCursor使⽤例⼦(Android数据库操作)完美 Android Cursor使⽤例⼦(Android数据库操作),Android 使⽤的数据库是SQLite数据库,对于数据库记录的操作,可以使⽤Cursor(游标)来进⾏。

1. 关于 Cursor在你理解和使⽤ Android Cursor 的时候你必须先知道关于 Cursor 的⼏件事情:Cursor 是每⾏的集合。

使⽤ moveToFirst() 定位第⼀⾏。

你必须知道每⼀列的名称。

你必须知道每⼀列的数据类型。

Cursor 是⼀个随机的数据源。

所有的数据都是通过下标取得。

Cursor 位于 .database.Cursor类,可见出它的设计是基于数据库服务产⽣的。

在Android 查询数据是通过Cursor 类来实现的。

当我们使⽤ SQLiteDatabase.query()⽅法时,就会得到Cursor对象, Cursor所指向的就是每⼀条数据。

2. 关于 Cursor 的重要⽅法:close()关闭游标,释放资源copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)在缓冲区中检索请求的列的⽂本,将将其存储getColumnCount()返回所有列的总数getColumnIndex(String columnName)返回指定列的名称,如果不存在返回-1getColumnIndexOrThrow(String columnName)从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。

getColumnName(int columnIndex)从给定的索引返回列名getColumnNames()返回⼀个字符串数组的列名getCount()返回Cursor 中的⾏数moveToFirst()移动光标到第⼀⾏moveToLast()移动光标到最后⼀⾏moveToNext()移动光标到下⼀⾏moveToPosition(int position)移动光标到⼀个绝对的位置moveToPrevious()移动光标到上⼀⾏3. ⼩例⼦:(1)为空的Cursor的判断if (cur.moveToFirst() == false) {//为空的Cursorreturn;}(2)访问 Cursor 的下标获得其中的数据int nameColumnIndex = cur.getColumnIndex();String name = cur.getString(nameColumnIndex);(3)循环 Cursor 取出需要的数据while(cur.moveToNext()) {//光标移动成功//把数据取出}当cur.moveToNext() 为假时将跳出循环,即Cursor数据循环完毕。

nativequery的使用

nativequery的使用

Native Query 使用教程本文介绍 Native Query 的概念、特点和使用方法,以及如何在项目中使用Native Query。

下面是本店铺为大家精心编写的4篇《Native Query 使用教程》,供大家借鉴与参考,希望对大家有所帮助。

《Native Query 使用教程》篇1一、概念Native Query 是 Android 平台上的一种数据库查询语言。

它允许开发者使用 SQL 语句直接操作数据库,而不需要通过 ORM(对象关系映射)框架。

相比 ORM 框架,Native Query 可以提供更高的查询性能和更灵活的查询语法。

二、特点1.性能高:Native Query 直接操作数据库,没有中间层,因此查询速度更快。

2.语法灵活:Native Query 支持 SQL 语句,可以进行复杂的查询操作。

3.跨平台:Native Query 支持多种数据库,如 SQLite、FMDB 等,可以在多个平台上使用。

4.易于使用:Native Query 提供了简单的 API,开发者可以轻松地使用它进行数据库操作。

三、使用方法1.导入库在项目中使用 Native Query,需要先导入以下库:```javaimport android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;```2.创建数据库和表在项目中创建一个数据库和表,用于存储数据。

例如,创建一个名为 "user" 的表,包含 "id"、"name"、"age" 三个字段:```javapublic class UserTable extends SQLiteOpenHelper {public UserTable(Context context) {super(context, "user.db", null,SQLiteDatabase.CREATE_IF_NEED);}@Overridepublic void onCreate(SQLiteDatabase db) {String CREATE_USER_TABLE = "CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";db.execSQL(CREATE_USER_TABLE);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS user");onCreate(db);}}```3.执行查询使用 Native Query 执行查询,可以通过 `sqliteQuery()` 方法实现。

android查询数据库中包含某个参数Android数据库Room基本使用

android查询数据库中包含某个参数Android数据库Room基本使用

android查询数据库中包含某个参数Android数据库Room基本使用Android数据库Room是Android官方推荐的一种持久化库,它简化了数据库的操作,并提供了强大的功能。

本文将介绍Android数据库Room的基本使用方法。

首先,我们需要在build.gradle文件中添加Room的依赖:```java```其中,$room_version是Room库的版本号。

```javapublic class Userpublic int id;public String name;public int age;``````javapublic interface UserDaoList<User> getUsers(;List<User> getUsersWithKeyword(String keyword);void insertUser(User user);void deleteUser(User user);```在这个示例中,我们定义了几个方法来完成常见的数据库操作,比如查询所有用户、根据关键字查询用户、插入用户、删除用户等。

接下来,我们需要创建一个继承自RoomDatabase的抽象类来表示数据库:```javapublic abstract class AppDatabase extends RoomDatabasepublic abstract UserDao getUserDao(;private static AppDatabase instance;public static synchronized AppDatabase getInstance(Context context)if (instance == null)instance =Room.databaseBuilder(context.getApplicationContext(,AppDatabase.class, "my-database").build(;}return instance;}```现在,我们可以在应用的任何地方使用AppDatabase来操作数据库了。

Android教程04 数据库

Android教程04 数据库

第二步需要在AndroidManifest.xml使用<provider>对 该ContentProvider进行配置,为了能让其他应用找到 该ContentProvider , ContentProvider 采用了 authorities(主机名/域名)对它进行唯一标识,可以 把 ContentProvider看作是一个网站,authorities 就 是网站域名:
创建新的数据库
SQLiteDatabase myDataBase=this.openOrCreateDatabase("myDataBase.db", MODE_PRIVATE, new CursorFactory(){ //创建新的数据库,名称myDatabase,模式MODE_PRIVATE,光标工厂 //工厂类,一个可选工厂类,当查询时调用来实例化一个光标 @Override public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) { // TODO Auto-generated method stub return null; } });
目录:/data/data/<包>/shared_prefs/***.xml
XML文件名
文件用来存储大数量的数据 采用java.io.*库所提供有I/O接口,读写文件。 只有本地文件可以被访问
优点:可以存储大容量的数据 缺点:文件更新或是格式改变可能会导致巨大的编 程工作
读文件
Context.openFileInput(String name)打开一个与应 用程序联系的私有文件输入流 当文件不存在时抛出FileNotFoundException 异常

android联系人数据库介绍

android联系人数据库介绍

<联系人>联系人数据库介绍拟制: Prepared by 吕欣阳日期:Date2015-11-26审核: Reviewed by 日期:Dateyyyy-mm-dd审核: Reviewed by 日期:Dateyyyy-mm-dd批准: Granted by日期:Dateyyyy-mm-dd青岛海信移动技术股份有限公司版权所有侵权必究修订记录Revision record目录联系人数据库介绍 (1)1 关键类 (1)1.1 ContactAggregator.java (1)1.2 MoreDatabaseUtils.java (1)1.3 ContactsDumpActivity.java (1)1.4 CallLogProvider.java (2)1.5 ContactLocaleUtils.java (2)1.6 ContactsDatabaseHelper.java (3)1.7 ContactsProvider2.java (4)1.8 DataRowHandler.java (5)1.9 FastScrollingIndexCache.java (5)1.10 GlobalSearchSupport.java (6)1.11 HanziToPinyin.java (6)1.12 NameSplitter.java (6)1.13 PhotoProcessor.java (6)1.14 SearchIndexManager.java (6)2 数据库主要表介绍 (7)2.1 Accounts表 (7)2.2 Contacts表 (7)2.3 data表 (7)2.4 groups表 (8)2.5 mimetypes表 (8)2.6 name_lookup表 (8)2.7 phone_lookup表 (8)2.8 raw_contacts表 (9)2.9 search_index_content表 (9)3 phone_lookup查询介绍 (10)4 私密联系人实现 (10)5 sqlite3介绍 (11)联系人数据库介绍1 关键类1.1 ContactAggregator.java合并、拆分类,两个联系人可以合并为一个,合并后详情显示全部信息,编辑界面可以看到合并的多个记录;合并后记录可以拆分为合并之前的多个记录对于contacts表的操作也在这个类中,contacts表中数据的生成在computeAggregateData()函数中。

android中数据库查询方法query

android中数据库查询方法query

Android 中数据库查询方法query() 中的selectAndroid 中涉及数据库查询的地方一般都会有一个query() 方法,而这些query 中有大都(全部?)会有一个参数selectionArgs,比如下面这个android.database.sqlite.SQLiteDatabase.query():view plaincopy to clipboardprint?public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)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" 的记录。

再实际项目中像上面那样简单的“静态”的selection 并不多见,更多的情况下要在运行时动态生成这个字符串,比如view plaincopy to clipboardprint?public doQuery(long id, final String name) {mDb.query("some_table", // table namenull, // columns"id=" + id + " AND name='" + name + "'", // selection//...... 更多参数省略);}public doQuery(long id, final String name) {mDb.query("some_table", // table namenull, // columns"id=" + id + " AND name='" + name + "'", // selection//...... 更多参数省略);}在这种情况下就要考虑一个字符转义的问题,比如如果在上面代码中传进来的name 参数的内容里面有单引号('),就会引发一个"SQLiteException syntax error .... "。

LitePal的查询

LitePal的查询

LitePal的查询传统的查询数据⽅式其实最传统的查询数据的⽅式当然是使⽤SQL语句了,Android当中也提供了直接使⽤原⽣SQL语句来查询数据库表的⽅法,即SQLiteDatabase中的rawQuery()⽅法,⽅法定义如下:public Cursor rawQuery(String sql, String[] selectionArgs)其中,rawQuery()⽅法接收两个参数,第⼀个参数接收的就是⼀个SQL字符串,第⼆个参数是⽤于替换SQL语句中占位符(?)的字符串数组。

rawQuery()⽅法返回⼀个Cursor对象,所有查询到的数据都是封闭在这个对象当中的,我们只要⼀⼀取出就可以了。

当然这种⽤法其实并不是很常⽤,因为相信⼤多数⼈都还是不喜欢编写SQL语句的。

所以,Android专门提供了⼀种封装好的API,使得我们不⽤编写SQL语句也能查询出数据,即SQLiteDatabase中的query()⽅法。

query()提供了三个⽅法重载,其中参数最少的⼀个也有七个参数,我们来看下⽅法定义:public Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having,String orderBy)其中第⼀参数是表名,表⽰我们希望从哪张表中查询数据。

第⼆个参数⽤于指定去查询哪⼏列,如果不指定则默认查询所有列。

第三、第四个参数⽤于去约束查询某⼀⾏或某⼏⾏的数据,不指定则默认是查询所有⾏的数据。

第五个参数⽤于指定需要去group by的列,不指定则表⽰不对查询结果进⾏group by操作。

第六个参数⽤于对group by之后的数据进⾏进⼀步的过滤,不指定则表⽰不进⾏过滤。

第七个参数⽤于指定查询结果的排序⽅式,不指定则表⽰使⽤默认的排序⽅式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
view plaincopy to clipboardprint?
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
相关文档
最新文档