android sqlite 总结
SQLite数据库_计算机软件及应用_IT计算机_专业资料
Android SQLite数据库增删改查操作的使用详解一、使用嵌入式关系型SQLite数据库存储数据在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。
例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。
但有一种情况例外:定义为I NTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产生错误。
另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后面的数据类型信息,如下面语句你可以省略name字段的类型信息:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20)) SQLite可以解析大部分标准SQL语句,如:代码如下:创建数据库有两种方式:1.使用SQLiteDatabase的静态方法创建或打开数据库->static SQLiteDatabase openDatabase(Stringpath,SQLiteDatabase.CursorFactory factory,int flag): 打开path文件所代表的SQLite数据库。
->static SQLiteDatabase openOrCreateDatabase(File file,SQLiteDatabase.CursorFactory factory): 打开或创建(如果不存在)file文件所代表的SQLite数据库。
安卓中知识点总结
安卓中知识点总结作为一名Android开发者,了解和掌握Android开发的知识点是非常重要的。
本文将对Android开发涉及的各种知识点进行总结,包括Java语言基础、Android框架、界面设计、数据库操作、网络请求、性能优化等方面的知识点。
一、Java语言基础1. 类和对象类是Java语言中的基本概念,它是对象的模板。
对象是类的实例,是具体的实体。
了解类和对象的概念是Java编程的基础。
2. 继承和多态继承是Java语言中非常重要的特性,它使得子类可以继承父类的属性和方法。
多态是继承的延伸,它使得一个对象可以以多种形态出现,提高了程序的灵活性和扩展性。
3. 接口和抽象类接口和抽象类都是Java中用来实现多态和封装的机制,它们可以让程序员定义一个函数,并且由实现类来实现该函数的具体功能。
4. 异常处理异常处理是Java语言中的重要机制,在处理IO异常、运行时异常等方面都有着重要作用。
5. 泛型泛型是Java中的一个重要特性,它使得类或方法可以接受任意类型的数据作为参数,提高了代码的复用性和灵活性。
6. 并发并发是指在同一时间段内同时运行多个程序或多个线程。
在Android开发中,了解并发编程的知识点可以帮助我们编写高效的多线程应用。
7. I/O流I/O流是Java中用来进行输入输出操作的重要概念,了解文件操作、网络操作、序列化等知识点对Android开发非常重要。
二、Android框架1. ActivityActivity是Android应用的一个重要组件,它负责提供一个用户界面来展示和与用户交互。
了解Activity的生命周期、启动方式、传递数据等知识点是非常重要的。
2. FragmentFragment是Android中用来实现复杂界面的一种重要组件,它可以在一个Activity中管理多个界面碎片。
了解Fragment的生命周期、使用方式、通信方式等知识点是非常重要的。
3. ServiceService是Android中用来实现后台任务的一种组件,它可以在后台执行长时间运行的任务。
安卓sqlite常用语句
SQLite 是Android 平台上的默认数据库管理系统,用于存储和检索数据。
以下是一些常用的SQLite 语句和操作:1. 创建数据库:sqlCREATE DATABASE [database_name];2. 打开数据库:如果你想在特定数据库上执行操作,你需要先打开它。
sqlATTACH DATABASE [database_name] AS [database_alias];3. 创建表:sqlCREATE TABLE [table_name] ([column1] [data_type],[column2] [data_type],...);4. 插入数据:sqlINSERT INTO [table_name] ([column1], [column2], ...)VALUES ([value1], [value2], ...);5. 查询数据:sqlSELECT FROM [table_name]; -- 选择所有列SELECT [column1], [column2] FROM [table_name]; -- 选择特定列6. 更新数据:sqlUPDATE [table_name]SET [column1] = [value1], [column2] = [value2], ...WHERE [condition];7. 删除数据:sqlDELETE FROM [table_name] WHERE [condition];8. 创建索引:创建索引可以加速查询速度。
sqlCREATE INDEX [index_name] ON [table_name] ([column1], [column2], ...);9. 创建触发器:触发器是与特定表相关联的特殊类型的存储过程,它自动执行特定操作。
例如,当向表中插入、更新或删除记录时,触发器可以自动执行。
10. 创建视图:视图是基于一个或多个表的虚拟表。
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 数据库存储•引⾔概念 SQLite 数据库,和其他的SQL 数据库不同, 我们并不需要在⼿机上另外安装⼀个数据库软件,Android 系统已经集成了这个数据库;特点SQLite 是⼀个轻量级的关系型数据库,运算速度快,占⽤资源少,很适合在移动设备上使⽤不仅⽀持标准SQL 语法,还遵循ACID(数据库事务)原则,⽆需账号,使⽤起来⾮常⽅便SQLite ⽀持五种数据类型NULLinteger (整型)real(浮点型)text(⽂本类型)blob(⼆进制类型)SQLite 通过⽂件来保存数据库⼀个⽂件就是⼀个数据库数据库中⼜包含多个表格表格⾥⼜有多条记录每条记录由多个字段构成每个字段都有对应的值•创建数据库 Android 为了让我们能够更加⽅便地管理数据库,专门提供了⼀个 SQLiteOpenHelper 帮助类; 借助这个类就可以⾮常简单地对数据库进⾏创建和升级。
SQLiteOpenHelper 是⼀个抽象类,这意味着如果我们想要使⽤它的话,就需要创建⼀个⾃⼰的帮助类去继承它; SQLiteOpenHelper 中有两个抽象⽅法,分别是 和 ;: 数据库第⼀次被创建时被调⽤: 在数据库的版本发⽣变化时会被调⽤⼀般在软件升级时才需改变版本号,⽽数据库的版本是由程序员控制的假设数据库现在的版本是 1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新⽤户⼿机⾥的数据库表结构为了实现这⼀⽬的,可以把原来的数据库版本设置为 2,或者其他与旧版本号不同的数字即可 我们必须在⾃⼰的帮助类⾥⾯重写这两个⽅法,然后分别在这两个⽅法中去实现 创建、升级数据库 的逻辑。
SQLiteOpenHelper 中还有两个⾮常重要的实例⽅法: 和 。
这两个⽅法都可以 创建或打开 ⼀个现有的数据库(如果数据库已存在则直接打开,否则创建⼀个新的数据库), 并返回⼀个可对数据库进⾏读写操作的对象。
在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中的存储方式及特点
简述android中的存储方式及特点《Android中的存储方式及特点》Android中提供了多种不同的存储方式,用来满足不同应用程序的需求。
每种存储方式都有其独特的特点和适用场景。
以下将简述几种常用的存储方式及其特点。
1. SharedPreferences(共享首选项)SharedPreferences是Android提供的一种简单的键值对存储机制。
它适用于存储简单的配置信息,如用户的设置偏好、应用程序的状态等。
SharedPreferences存储方式简单高效,数据以XML形式存储在用户手机的文件系统中,但其容量有限,不适用于大量数据的存储。
2. 文件存储Android中的文件存储方式可以通过File类来实现。
文件存储适用于需要保存较大数据的情况,如日志文件、图片、音频等。
文件存储方式具有较高的灵活性和可扩展性,但需要手动处理文件读写的逻辑,并且需要权限管理。
3. 数据库存储(SQLite)Android提供了SQLite数据库作为持久化数据的存储方式。
SQLite是一种轻量级数据库引擎,适用于存储结构化数据。
它提供了SQL语句来进行数据的增删改查操作,并支持事务处理。
SQLite存储方式可以对数据进行高效的查询和排序,但相对于其他存储方式,其使用上稍微复杂些。
4. ContentProviderContentProvider是一种Android特有的存储方式,用于实现不同应用程序之间的数据共享。
通过ContentProvider,应用程序可以将自己的数据暴露给其他应用程序,并提供标准的CRUD(创建、读取、更新、删除)操作。
ContentProvider可以保护数据的安全性,并提供对外的数据访问接口。
5. 网络存储随着云服务的普及,Android中也提供了网络存储的方式。
通过网络存储,应用程序可以将数据存储在云端服务器上,实现数据的远程访问和共享。
网络存储方式需要考虑网络连接稳定性和数据安全性的问题,同时也需要对服务器端进行相应的开发。
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操作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程序设计有所帮助。
关于android studio sqlite数据库实验总结
关于android studio sqlite数据库实验总结作为一个Android Studio的SQLite数据库实验,以下是一些总结:1. 安装SQLite驱动程序:要在Android Studio中使用SQLite,需要安装SQLite驱动程序。
可以使用Android SDK中的工具包安装,具体步骤可以参考SQLite官方文档。
2. 创建SQLite数据库:在Android Studio中创建一个SQLite 数据库,可以在Project--> Database中创建。
在创建数据库时,需要提供一个数据库名称和密码,并设置数据库连接的用户名和密码。
3. 连接SQLite数据库:可以使用Android Studio提供的SQLite 连接工具,在Project--> Database中选择创建的SQLite数据库,然后选择连接工具。
连接时需要提供数据库名称和密码,以及连接服务器的地址和端口号。
4. 创建和保存数据库表:在Android Studio中创建和保存数据库表可以使用SQL语句。
可以使用SQLite的CREATE TABLE语句来创建表,也可以使用INSERT、SELECT等语句来创建、更新和删除表的数据。
5. 操作数据库表:在Android Studio中可以通过SQL语句和Android API来操作数据库表。
可以使用Android Studio提供的SQLite API来执行SELECT、INSERT、UPDATE、DELETE等SQL操作,也可以使用Java API来执行这些操作。
6. 保存和备份数据库:在完成数据库操作后,需要保存和备份数据库。
可以使用Android Studio提供的SQLite连接工具来保存数据库,也可以使用其他工具来备份数据库。
7. 调试数据库操作:在Android Studio中可以通过SQLite连接工具和Android API来调试数据库操作。
sqlite使用场景
sqlite使用场景
SQLite是一款轻量级的关系型数据库,广泛应用于移动应用、桌面应用和嵌入式设备中。
以下是SQLite的常见使用场景:
1. 移动应用:由于SQLite具有小巧、快速和可靠的特点,因此它是移动应用中最流行的数据库之一。
许多移动应用中的数据存储都是通过SQLite来实现的。
2. 桌面应用:SQLite也可用于桌面应用程序的数据存储。
许多桌面应用程序,如浏览器、文本编辑器和图像编辑器,都使用SQLite 来存储其数据。
3. 嵌入式设备:SQLite可用于各种嵌入式设备中,如路由器、智能家居设备和物联网设备。
由于SQLite的小巧和高效,它是嵌入式设备中最受欢迎的数据库之一。
4. Web应用程序:SQLite也可以用于Web应用程序中。
它可以用于存储Web应用程序的数据,如用户信息、配置设置等。
总之,SQLite是一款非常灵活和通用的数据库,可用于各种应用程序和设备中。
无论您需要在何处存储数据,SQLite都可以为您提供一个高效、可靠和易于使用的解决方案。
- 1 -。
android数据存储实验总结
android数据存储实验总结一、实验介绍Android数据存储实验是在Android Studio开发环境下,利用SharedPreferences,SQLite和File三种API实现Android应用程序的数据存储,实现具有添加、查询、删除等功能的Android应用程序。
实验帮助了解Android中三种数据存储:SharedPreferences、SQLite 以及File三种存储方式的实际应用。
二、实验步骤1、创建Android工程使用Android Studio创建一个新的Android工程,并命名为MyDataStorage。
2、编写布局文件编写主页面的布局文件,通过ListView展示数据,添加EditText 用于输入数据,以及添加Button用于添加数据。
3、实现SharedPreferences存储创建一个SharedPreferences对象,调用edit()方法获得一个Editor对象,用来向SharedPreferences写入数据,通过getString()方法从SharedPreferences中读取数据。
4、实现SQLite数据库存储使用SQLiteOpenHelper类创建、管理数据库,调用SQLiteDatabase对象的execSQL()方法创建表格,调用SQLiteDatabase对象的insert()方法向表格插入数据;调用SQLiteDatabase对象的query()方法查询数据,调用SQLiteDatabase 对象的delete()方法删除数据。
5、实现文件存储创建一个文件对象,打开文件,使用PrintWriter写数据,使用BufferedReader读取数据。
三、实验结果通过本次实验,我学习了三种Android数据存储的方式:SharedPreferences、SQLite和File,并使用这三种方式实现了一个Android应用程序的数据存储。
Android系统中SQLite数据库的研究
( u s e r i d I N T E G E R P R I MA R Y K E Y A U T O I N C R E ME N T , u s e r n a me T E X T , p w d T E X T ) ; ” ) ;
执行这些语句后 , 会在数据库 中创建 一个名为 m y u s e r 的表。该表第一个字段名为 u s e r i d , 并且是 主键 , 自增长整数类 型( 即当 插入一行数据时 , S Q L i t e 会给这列 自动赋值 ) ; 第二个 字段 名为 u s e r n a m e , 字符类 型 ; 第三个字段名 为p w d , 也是字符类型 。
3 . 2创 建 表
A n d r o i d 系统中创建表 的操作 可由 S Q L i t e D a t a b a s e 类来实现 , 该类 的 e x e c S Q L 0 方法以一个 D D L 类型的 S Q L 语句作 为参数 , 用来
执 行该 D D L 语句。
例如 , 如下代码 : S Q L i t e D a t a b a s e my d b=d a t a b a s e H e l p e r . g e t Wr i t a b l e D a t a b a s e 0 ; m y d b . e x e c S Q L ( ” C R E A T E T AB L E m y u s e r
Android开发中的数据存储技术研究
Android开发中的数据存储技术研究随着移动互联网和智能手机的普及,人们对于手机应用程序的需求越来越高,要求对手机数据进行高效、安全的存储和管理。
而Android作为最广泛使用的移动操作系统之一,其数据存储技术也成为我们开发人员必须熟练掌握的内容之一。
本文将重点探讨在Android开发中的数据存储技术,希望能够为开发人员提供一些有价值的参考。
一、 SQLite数据库SQLite数据库是一种轻量级的数据库管理系统,应用广泛,包括了操作系统、Web浏览器、工具软件等等。
在Android开发中,SQLite数据库也是常用的数据存储技术。
使用SQLite数据库,我们可以方便地进行本地数据的存储和管理,应用场景很多。
1.1 SQLite的基本概念在使用SQLite数据库之前,我们需要先了解一些基本概念。
下面介绍三个基本概念:表、行、列。
表:SQLite中的表与其他数据库类似,是一种数据结构,用于存储数据。
表由行和列组成,行表示一个条目,列是条目中的一个字段。
行(Record):SQLite中的行与表中的行类似,它是一种数据结构,表示表中的一条纪录。
行的数量表示表中数据的数量。
列(Field):SQLite中的列与表中的列类似,它是一种数据结构,表示表中的一个字段。
列的数量代表了表的属性数量。
1.2 SQLite的使用在Android中使用SQLite通常需要进行以下步骤:1.创建数据库在Android中创建一个SQLite数据库其实就是创建一个SQLiteOpenHelper对象。
在该对象中,我们需要实现其构造函数、onCreate()和onUpgrade()等方法,并在onCreate()方法中创建数据库,数据表和数据默认记录。
2.插入数据在SQLite中插入数据通常需要使用insert()方法,而该方法需要传入数据库名以及一个ContentValues类型的参数,ContentValues是用来存储数据的类。
SQLiteStudio优雅调试Android手机数据库Sqlite(推荐)
SQLiteStudio优雅调试Android⼿机数据库Sqlite(推荐)前⾔调试Android中的数据库有多种⽅式,⽬前⽐较流⾏的是:借助电脑端浏览器来调试,可以使⽤如下两个玩意:1.2.博主在调试sqlite的时候,发现了个更加简单和强⼤的⼯具来调试sqlite数据库。
这个⼯具叫SQLiteStudio它是个电脑端的软件,⼀个可视化sqlite的⼯具,利⽤SQLiteStudio,我们可以从各种⾓度,各种姿势去管理sqlite数据库。
对于Android开发者来说,它可以连接上你的应⽤,实时调试你⼿机中的sqlite数据库。
⽅便的管理你的数据库,管理你的表的结构,增删改查你的数据。
⼀览软件的全貌:软件你们⾃⼰熟悉,下⾯我主要说⼀下,如何连接上你的app,然后调试⾥⾯的sqlite数据库。
⼏个步骤设置⽀持Android sqlite将jar包加⼊你的项⽬1.获得jar包这时候,在D盘就有了SQLiteStudioRemote.jar这个⽂件2.将SQLiteStudioRemote.jar加⼊你的Android项⽬3.在你的application中添加代码:SQLiteStudioService.instance().start(this)打开SQLiteStudio软件,连接你的数据库ok,事已⾄此,连接成功!补充:B必须连接⼿机,并使⽤jar的项⽬打开着,才可以连接成功。
断掉之后,⼯具显⽰不了数据库内容,只看到数据库名称。
总结以上所述是⼩编给⼤家介绍的SQLiteStudio优雅调试Android⼿机数据库Sqlite,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
在此也⾮常感谢⼤家对⽹站的⽀持!。
Android数据库SQLite性能优化
n e e d e d t o i n s e t r a n d q u e r y d a t a f r o m A n ro d i d S Q L i t e , w h i c h i m p r o v e s S Q L i t e p e r f o ma r n c e u l t i ma t e l y .
Ke y wo r d s : An d r o i d S Ql i t e ; p e r f o r ma n c e o p t i mi z a t i o n ; t r a n s a c t i o n ; i n d e x
随 x i y t o f t h e u s e r d a t a , t h e r e i s h i g h e r d e ma n d u p o n t h e S Q L i t e p e r f o ma r n c e w h i c h ma y a f f e c t t h e p e r f o ma r n c e o f
t r a n s a c t i o n s a n d e x c e l l e n t p o ta r bi l i t y . An d i t i s r e s po ns i b l e f o r mu l t i p l e f o m a r t s o f d a t a s t o r a g e . Wi t h t h e e x p a n s i o n a n d
o f S QL i t e . B y me a n s o f t u r n i n g o n t r a n s a c t i o n ma n u a l l y a n d c r e a t i n g B — t r e e i n d e x p r o p e r l y , i t g r e a t l y r e d u c e s t h e t i me
android sqlite insert的返回值
在Android中,当你使用SQLite数据库进行插入操作时,通常情况下并没有一个直接的返回值来表示插入操作是否成功。
这是因为SQLite的INSERT操作是一个原子操作,要么完全成功,要么完全失败,不会因为中间某个环节失败而导致数据不一致。
但是,你可以通过以下几种方式来间接判断插入操作是否成功:
1.使用lastInsertId()方法:
如果你在插入操作时指定了一个自增的主键,那么在插入操作完成后,你可以调用lastInsertId()方法来获取这个新插入的记录的自增ID。
如果这个方法返回-1,那么表示插入操作失败。
2.捕获异常:
如果在进行插入操作时出现了异常,那么这意味着插入操作失败了。
你可以通过捕获SQLException来处理这种情况。
3.查询数据库:
在插入操作后,你可以执行一个查询来检查新插入的记录是否存在。
如果存在,那么插入操作成功;否则,插入操作失败。
注意:为了提高效率,如果知道有数据被成功插入,建议直接使用lastInsertId()或者异常处理来确定结果,而不是进行额外的查询操作。
Android+JqueryMobile学习系列(5)-SQLite数据库
SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。
因为Android已经集成了SQLite,所以开发人员无需引入任何JAR包,而且Android也针对SQLite封装了专属的API,调用起来非常快捷方便。
我也是第一次接触SQLite,感受到它的一些不同之处,作为一门简易实用的数据库,它的学习周期其实蛮短的。
对于懂关系型数据库的人来说,使用SQLite应该是得心应手的。
Android支持很多类型的存储方式,比如File文件、sharedPreference和数据库等,因为我做的应用涉及到频繁的更新操作,而且数据组成较为复杂,所以最终选择了SQLite数据库作为应用的存储方式。
但是听有经验的开发人员说,在Android上使用数据文件存储极其不好,只要有ROOT权限就可以随意删除文件,所以如果你的应用属于商业性质,我推荐你做一个网络站点将数据存储于网络服务器上最好。
特性不需要配置,不需要安装,也不需要管理员。
SQLite不需要安装任何数据库相关的服务器,一个完整的数据库保存在磁盘上面一个文件,要想用数据库工具查看SQLite只需要将它指向那个数据库文件即可!源代码开放, 代码95%有较好的注释。
完美支持大部分的标准SQL语句。
如果你懂得MYSql、Oracle等关系型数据的使用,那么用SQLite也是得心应手。
SQLite最大的特点是,数据表中的字段是无类型的,这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中(除了integer Primary Key)。
我的理解是:一张表上的主键必须指定数据类型,而且存储更新时,主键的数据类型一定要对应;而其它的字段全部都是无类型的,你可以存字符串,也可以存int整数。
所以在建表的时候你可以这样写:CREATE TABLE IF NOT EXISTS user_info (id INTEGER PRIMARY KEY,name,sex)除了主键外,其它字段均不用定义数据类型,即使定义了数据类型,SQLite也会忽略掉。
android:SQLite更新数据
android:SQLite更新数据学习完了如何向表中添加数据,接下来我们看看怎样才能修改表中已有的数据。
SQLiteDatabase 中也是提供了⼀个⾮常好⽤的 update()⽅法⽤于对数据进⾏更新,这个⽅法接收四个参数,第⼀个参数和 insert()⽅法⼀样,也是表名,在这⾥指定去更新哪张表⾥的数据。
第⼆个参数是 ContentValues 对象,要把更新数据在这⾥组装进去。
第三、第四个参数⽤于去约束更新某⼀⾏或某⼏⾏中的数据,不指定的话默认就是更新所有⾏。
那么接下来我们仍然是在 DatabaseTest 项⽬的基础上修改,看⼀下更新数据的具体⽤法。
⽐如说刚才添加到数据库⾥的第⼀本书,由于过了畅销季,卖得不是很⽕了,现在需要通过降低价格的⽅式来吸引更多的顾客,我们应该怎么操作呢?⾸先修改 activity_main.xml 中的代码,如下所⽰:android:layout_width="match_parent" android:layout_height="match_parent"android:orientation="vertical" >……<Button android:id="@+id/update_data" android:layout_width="match_parent" android:layout_height="wrap_content"android:text="Update data"/></LinearLayout>布局⽂件中的代码就已经⾮常简单了,就是添加了⼀个⽤于更新数据的按钮。
然后修改MainActivity 中的代码,如下所⽰:public class MainActivity extends Activity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(yout.activity_main); dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);……Button updateData = (Button) findViewById(R.id.update_data);updateData.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("price", 10.99);db.update("Book", values, "name = ?", new String[] { "The DaVinci Code" });}});}}这⾥在更新数据按钮的点击事件⾥⾯构建了⼀个 ContentValues 对象,并且只给它指定了⼀组数据,说明我们只是想把价格这⼀列的数据更新成 10.99。
AndroidStudioAndroid数据存储五种方式总结
AndroidStudioAndroid数据存储五种方式总结本文介绍Android平台进行数据存储的五大方式,分别如下:1 使用SharedPreferences存储数据2 文件存储数据3 SQLite数据库存储数据4 使用ContentProvider存储数据5 网络存储数据第一种:使用SharedPreferences存储数据SharedPreferencese的使用:https:///augfun/article/details/54563808 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。
比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等。
核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。
通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data//shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。
SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例class ViewOcl implements View.OnClickListener{undefined @Overridepublic void onClick(View v) {switch(v.getId()){case R.id.btnSet://步骤1:获取输入值String code = txtCode.getText().toString().trim();//步骤2-1:创建一个SharedPreferences.Editor接口对象,lock 表示要写入的XML文件名,MODE_WORLD_WRITEABLE写操作SharedPreferences.Editor editor = getSharedPreferences("lo ck", MODE_WORLD_WRITEABLE).edit();//步骤2-2:将获取过来的值放入文件editor.putString("code", code);//步骤3:提交mit();Toast.makeText(getApplicationContext(), "口令设置成功", Toast.LENGTH_LONG).show();break;case R.id.btnGet://步骤1:创建一个SharedPreferences接口对象SharedPreferences read = getSharedPreferences("lock", MO DE_WORLD_READABLE);//步骤2:获取文件中的值String value = read.getString("code", "");Toast.makeText(getApplicationContext(), "口令为:"+value, Toast.LENGTH_LONG).show();break;}12345678910111213141516171819202122232425第二种:文件存储数据核心原理: Context提供了两个方法来打开数据文件里的文件IO流FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数用于指定文件名,第二个参数指定打开文件的模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
直到调用getWritableDatabase()函数或者getReadableDatabase()时才会创建或者打开数据库。(如果数据库没有创建,那么会先创建数据库)
Parameters
context to use to open or create the database
name of the database file, or null for an in-memory database
private static final int DB_VERSION = 2;
private static final String TABLE_NAME_1 = "MyOrder";
private static final String TABLE_NAME_2 = "OrderLine";
cur.moveToFirst();
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
+ " text" + ");");
db.execSQL("CREATE TABLE " + TABLE_NAME_2 + " (" + "order_no"
+ " text not null, " + "item_no" + " text not null, "
android.database.sqlite.SQLiteOpenHelperpublic SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) Create a helper object to create, open, and/or manage a database. The database is not actually created or opened until one of getWritableDatabase() or getReadableDatabase() is called.
try {
db.execSQL(sql_1);
db.execSQL(sql_2);
db.execSQL(sql_3);
setTitle("insert records ok!");
} catch (SQLException e) {
SQLiteOpenHelper,如果这个数据库存在,那么SQLiteOpenHelper负责管理数据库。
如果数据库不存在,那么SQLiteOpenHelper会建立一个数据库。
如果需要的话,升级数据库。
private static final String DB_NAME = "CartDB.db";
String sql = "create table Student(" + "stud_no text not null, "
+ "stud_name text );";
try {
db.execSQL(sql);
setTitle("create table ok!");
} catch (SQLException e) {
Log.e("ERROR", e.toString());
setTitle("create table Error!");
}
drop数据库:
mOpenHelper = new DatabaseHelper(v.getContext());
String sql_2 = "insert into Student (stud_no, stud_name) values('S201', 'Tom Kao');";
String sql_3 = "insert into Student (stud_no, stud_name) values('S333', 'Peter Rabbit');";
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql = "drop table Student";
try {
db.execSQL(sql);
setTitle("drop table ok!");
cur = db.query("Student", col, null, null, null, null, null);
Integer n = cur.getCount();
String ss = Integer.toString(n);
setTitle(ss + " records");
A helper class to manage database creation and version management.
SQLiteOpenHelper类是管理数据库生成和数据库版本建立的辅助类。
You create a subclass implementing onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) and optionally onOpen(SQLiteDatabase), and this class takes care of opening the database if it exists, creating it if it does not, and upgrading it as necessary. Transactions are used to make sure the database is always in a sensible state
}
@Override
public void oபைடு நூலகம்Create(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME_1 + " (" + "order_no"
+ " text not null, " + "type" + " text not null, " + "desc"
} catch (SQLException e) {
Log.e("ERROR", e.toString());
setTitle("drop table Error!");
}
插入语句:
采用sql语句进行插入:
mOpenHelper = new DatabaseHelper(v.getContext());
Log.e("ERROR", e.toString());
}
采用第二种方便的方法进行插入:(采用contentValues的方法)
mOpenHelper = new DatabaseHelper(v.getContext());
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("stud_no", "S108");
cv.put("stud_name", "Lily Chen");
db.insert("Student", null, cv);
查询语句:
mOpenHelper = new DatabaseHelper(v.getContext());
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
String col[] = { "stud_no", "stud_name" };
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String sql_1 = "insert into Student (stud_no, stud_name) values('S108', 'Lily Chen');";
cv.put("stud_no", "S333");
cv.put("stud_name", "Peter Rabbit");