- 浏览: 3466391 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
使用嵌入式关系型SQLite数据库存储数据
除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。
在Android平台上,集成了一个嵌入式关系型数据库—SQLite,
1、SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
2、SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。
3、但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。
4、另外, SQLite 在解析CREATE TABLE 语句时,会忽略 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 person
select * from person order by id desc
select 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(值列表)。如: insert into person(name, age) values(‘传智’,3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10
删除语句:delete from 表名 where 条件子句。如:delete from person where id=10
1.创建Android工程
Project name: db
BuildTarget:Android2.2
Application name: 数据库应用
Package name: com.jbridge.db
Create Activity: DBActivity
Min SDK Version:8、
2. Person实体
package com.jbridge.domain; import android.R.string; public class Person { private Integer id; private String name; private Short age; public Person(String name, Short age) { this.name = name; this.age = age; } public Person(Integer id, String name, Short age) { super(); this.id = id; this.name = name; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Short getAge() { return age; } public void setAge(Short age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
3.编写DataBaseOpenHelper类
DataBaseOpenHelper继承自SQLiteOpenHelper类。我们需要创建数据表,必须重写onCreate(更新时重写onUpgrade方法)方法,在这个方法中创建数据表。
package com.jbridge.service; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DataBaseOpenHelper extends SQLiteOpenHelper { // 类没有实例化,是不能用作父类构造器的参数,必须声明为静态 private static String dbname = "zyj"; private static int version = 1; public DataBaseOpenHelper(Context context) { // 第一个参数是应用的上下文 // 第二个参数是应用的数据库名字 // 第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类 // 第四个参数是数据库版本,必须是大于0的int(即非负数) super(context, dbname, null, version); // TODO Auto-generated constructor stub } public DataBaseOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age INTEGER)"); } // onUpgrade()方法在数据库版本每次发生变化时都会把用户手机上的数据库表删除,然后再重新创建。 // 一般在实际项目中是不能这样做的,正确的做法是在更新数据库表结构时,还要考虑用户存放于数据库中的数据不会丢失,从版本几更新到版本几。 @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { db.execSQL("DROP TABLE IF EXISTS person"); onCreate(db); } }4.编写PersonService类
PersonService类主要实现对业务逻辑和数据库的操作。
package com.jbridge.service; import java.util.ArrayList; import java.util.Currency; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.jbridge.domain.Person; public class PersonService { private DataBaseOpenHelper dbOpenHelper; // private Context context; public PersonService(Context context) { // this.context = context; dbOpenHelper = new DataBaseOpenHelper(context); } public void save(Person person) { SQLiteDatabase database = dbOpenHelper.getWritableDatabase(); database.beginTransaction(); database.execSQL("insert into person(name,age)values(?,?)", new Object[] { person.getName(), person.getAge() }); // database.close();可以不关闭数据库,他里面会缓存一个数据库对象,如果以后还要用就直接用这个缓存的数据库对象。但通过 // context.openOrCreateDatabase(arg0, arg1, arg2)打开的数据库必须得关闭 database.setTransactionSuccessful(); database.endTransaction(); } public void update(Person person) { SQLiteDatabase database = dbOpenHelper.getWritableDatabase(); database.execSQL( "update person set name=?,age=? where personid=?", new Object[] { person.getName(), person.getAge(), person.getId() }); } public Person find(Integer id) { SQLiteDatabase database = dbOpenHelper.getReadableDatabase(); Cursor cursor = database.rawQuery( "select * from person where personid=?", new String[] { String.valueOf(id) }); if (cursor.moveToNext()) { return new Person(cursor.getInt(0), cursor.getString(1), cursor.getShort(2)); } return null; } public void delete(Integer... ids) { if (ids.length > 0) { StringBuffer sb = new StringBuffer(); for (Integer id : ids) { sb.append('?').append(','); } sb.deleteCharAt(sb.length() - 1); SQLiteDatabase database = dbOpenHelper.getWritableDatabase(); database.execSQL( "delete from person where personid in(" + sb.toString() + ")", ids); } } public List<Person> getScrollData(int startResult, int maxResult) { List<Person> persons = new ArrayList<Person>(); SQLiteDatabase database = dbOpenHelper.getReadableDatabase(); Cursor cursor = database.rawQuery( "select * from person limit ?,?", new String[] { String.valueOf(startResult), String.valueOf(maxResult) }); while (cursor.moveToNext()) { persons.add(new Person(cursor.getInt(0), cursor.getString(1), cursor.getShort(2))); } return persons; } // 获取分页数据,提供给SimpleCursorAdapter使用。 public Cursor getRawScrollData(int startResult, int maxResult) { List<Person> persons = new ArrayList<Person>(); SQLiteDatabase database = dbOpenHelper.getReadableDatabase(); return database.rawQuery( "select personid as _id ,name,age from person limit ?,?", new String[] { String.valueOf(startResult), String.valueOf(maxResult) }); } public long getCount() { SQLiteDatabase database = dbOpenHelper.getReadableDatabase(); Cursor cursor = database.rawQuery("select count(*) from person", null); if (cursor.moveToNext()) { return cursor.getLong(0); } return 0; } }
下面是使用 insert()、delete()、update()和query()方法实现的业务类
package com.jbridge.service; import java.util.ArrayList; import java.util.Currency; import java.util.List; import android.R.string; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.jbridge.domain.Person; public class OtherPersonService { private DataBaseOpenHelper dbOpenHelper; // private Context context; public OtherPersonService(Context context) { // this.context = context; dbOpenHelper = new DataBaseOpenHelper(context); } public void save(Person person) { SQLiteDatabase database = dbOpenHelper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("name", person.getName()); contentValues.put("age", person.getAge()); database.insert("person", null, contentValues); } public void update(Person person) { SQLiteDatabase database = dbOpenHelper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("name", person.getName()); contentValues.put("age", person.getAge()); database.update("person", null, "personid=?", new String[] { String.valueOf(person.getId()) }); } public Person find(Integer id) { SQLiteDatabase database = dbOpenHelper.getReadableDatabase(); Cursor cursor = database.query("person", new String[] { "personid", "name", "age" }, "personid=?", new String[] { String.valueOf(id) }, null, null, null); if (cursor.moveToNext()) { return new Person(cursor.getInt(0), cursor.getString(1), cursor.getShort(2)); } return null; } public void delete(Integer... ids) { if (ids.length > 0) { StringBuffer sb = new StringBuffer(); String[] strIds = new String[ids.length]; // for (Integer id : ids) { // sb.append('?').append(','); // } for (int i = 0; i < strIds.length; i++) { sb.append('?').append(','); strIds[i] = String.valueOf(ids[i]); } sb.deleteCharAt(sb.length() - 1); SQLiteDatabase database = dbOpenHelper.getWritableDatabase(); database.delete("person", "personid in(" + sb.toString() + ")", strIds); } } public List<Person> getScrollData(int startResult, int maxResult) { List<Person> persons = new ArrayList<Person>(); SQLiteDatabase database = dbOpenHelper.getReadableDatabase(); Cursor cursor = database.query("person", new String[] { "personid", "name", "age" }, null, null, null, null, "personid desc", startResult + "," + maxResult); while (cursor.moveToNext()) { persons.add(new Person(cursor.getInt(0), cursor.getString(1), cursor.getShort(2))); } return persons; } public long getCount() { SQLiteDatabase database = dbOpenHelper.getReadableDatabase(); Cursor cursor = database.query("person", new String[] { "count(*)" }, null, null, null, null, null); if (cursor.moveToNext()) { return cursor.getLong(0); } return 0; } }5.编写测试类
编写一个针对PersonService的测试类,测试PersonService类中的各个方法是否正确。
package com.jbridge.db; import java.util.List; import com.jbridge.domain.Person; import com.jbridge.service.OtherPersonService; import com.jbridge.service.PersonService; import android.test.AndroidTestCase; import android.util.Log; public class PersonServiceTest extends AndroidTestCase { private static String TAG = "PersonServiceTest"; // OtherPersonService personService = new // OtherPersonService(this.getContext()); // //不可以这么写,因为Android把context环境变量是在PersonServiceTest实例化后给他的 public void testSave() throws Exception { PersonService personService = new PersonService(this.getContext()); // personService.save(new Person("老猪", (short) 11)); for (int i = 0; i < 10; i++) { personService.save(new Person("你" + i, (short) (i + 10))); } } public void testFind() throws Exception { PersonService personService = new PersonService(this.getContext()); Person person = personService.find(1); Log.i(TAG, person.toString()); } public void testUpdate() throws Exception { PersonService personService = new PersonService(this.getContext()); Person person = personService.find(1); person.setName("lv"); personService.update(person); } public void testDelete() throws Exception { PersonService personService = new PersonService(this.getContext()); personService.delete(1, 2, 3); } public void testGetCount() throws Exception { PersonService personService = new PersonService(this.getContext()); Log.i(TAG, String.valueOf(personService.getCount())); } public void testGetScrollData() throws Exception { PersonService personService = new PersonService(this.getContext()); List<Person> persons = personService.getScrollData(0, 3); for (Person person : persons) { Log.i(TAG, person.toString()); } } }启用测试功能,不要忘记在AndroidManifest.xml文件中加入测试环境。为application元素添加一个子元素:<uses-library android:name="android.test.runner"/>,为application元素添加一个兄弟元素:<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.jbridge.db" android:label="Tests for My App" />。
SQLite数据库以单个文件存储,就像微软的Access数据库。有一个查看SQLite数据库文件的工具——SQLite Developer,我们可以使用它来查看数据库。Android将创建的数据库存放在”/data/data/ com.jbridge.db/databases/person”,我们将它导出然后使用SQLite Developer打开。
6.分页显示数据
我们在ContactsService类中,提供了一个获取分页数据的方法。我们将调用它获取的数据,使用ListView组件显示出来。
编辑mail.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="40px" android:layout_height="wrap_content" android:textSize="20px" android:id="@+id/personidtitle" android:text="编号" /> <TextView android:layout_width="200px" android:layout_height="wrap_content" android:textSize="20px" android:layout_toRightOf="@id/personidtitle" android:layout_alignTop="@id/personidtitle" android:gravity="center_horizontal" android:id="@+id/nametitle" android:text="姓名" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20px" android:layout_toRightOf="@id/nametitle" android:layout_alignTop="@id/nametitle" android:id="@+id/agetitle" android:text="年龄" /> </RelativeLayout> <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/listView" /> </LinearLayout>
在mail.xml所在目录里添加一个personitem.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="40px" android:layout_height="wrap_content" android:textSize="20px" android:id="@+id/personid" /> <TextView android:layout_width="200px" android:layout_height="wrap_content" android:textSize="20px" android:layout_toRightOf="@id/personid" android:layout_alignTop="@id/personid" android:gravity="center_horizontal" android:id="@+id/name" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20px" android:layout_toRightOf="@id/name" android:layout_alignTop="@id/name" android:id="@+id/age" /> </RelativeLayout>
编辑 DBActivity 类:
package com.jbridge.db; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.jbridge.domain.Person; import com.jbridge.service.PersonService; import android.R.string; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.provider.LiveFolders; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class DBActivity extends Activity { /** Called when the activity is first created. */ private static final String TAG = "DBActivity"; /*实现方法一 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); PersonService personService=new PersonService(this); ListView listView = (ListView) this.findViewById(R.id.listView); List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>(); // HashMap<String, String> title = new HashMap<String, String>(); // title.put("personid", "编号"); // title.put("name", "姓名"); // title.put("age", "年龄"); // data.add(title); List<Person> persons= personService.getScrollData(0, 10); for (Person person : persons) { HashMap<String, String> p = new HashMap<String, String>(); p.put("personid", String.valueOf(person.getId())); p.put("name", person.getName()); p.put("age",String.valueOf(person.getAge())); data.add(p); } // 适配器有: // ArrayAdapter<T> // simpAdapter // SimpleCursorAdapter SimpleAdapter adapter = new SimpleAdapter(DBActivity.this, data, R.layout.personitem, new String[] { "personid", "name", "age" }, new int[] {R.id.personid, R.id.name, R.id.age }); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override // parent即为你点击的listView // view为listview的外面布局 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListView listView= (ListView) parent; HashMap<String, String> itemdata= (HashMap<String, String>) listView.getItemAtPosition(position); String personid=itemdata.get("personid"); String name=itemdata.get("name"); String age=itemdata.get("age"); Log.i(TAG,view.getClass().getName()); Log.i(TAG, "personid: "+personid+ " name: "+name+" age: "+age); Log.i(TAG," position==id:"+ (position==id)); Toast.makeText(DBActivity.this, name, Toast.LENGTH_LONG).show(); } }); } */ // 实现方法二(游标) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); PersonService personService = new PersonService(this); ListView listView = (ListView) this.findViewById(R.id.listView); List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>(); // HashMap<String, String> title = new HashMap<String, String>(); // title.put("personid", "编号"); // title.put("name", "姓名"); // title.put("age", "年龄"); // data.add(title); // 适配器有: // ArrayAdapter<T> // simpAdapter // SimpleCursorAdapter Cursor cursor = personService.getRawScrollData(0, 10); SimpleCursorAdapter adapter = new SimpleCursorAdapter(DBActivity.this, R.layout.personitem, cursor, new String[] { "_id", "name", "age" }, new int[] { R.id.personid, R.id.name, R.id.age }); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override // parent即为你点击的listView // view为listview的外面布局 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListView listView = (ListView) parent; Cursor cursor = (Cursor) listView.getItemAtPosition(position); String personid = String.valueOf(cursor.getInt(0)); String name = String.valueOf(cursor.getString(1)); String age = String.valueOf(cursor.getShort(2)); Log.i(TAG, view.getClass().getName()); Log.i(TAG, "personid: " + personid + " name: " + name + " age: " + age); Log.i(TAG, " position==id:" + (position == id)); Toast.makeText(DBActivity.this, name, Toast.LENGTH_LONG).show(); } }); } }
- db.rar (64.2 KB)
- 下载次数: 937
评论
发表评论
-
Android 桌面部件
2011-07-06 19:26 1874桌面部件是一种利用AppWidget框架将应用程序的某个部件放 ... -
Android 实时文件夹
2011-07-06 15:38 2860实时文件夹是一种用来显示由某个ContentProvider提 ... -
android 添加桌面快捷方式
2011-07-05 19:20 13290、在桌面创建快捷方式方法: 方法一:通过长按某一个应用程序的 ... -
Android权限详解
2011-07-04 09:43 2242在Android的设计中,资源的访问或者网络连接,要得到这 ... -
Android权限注解
2011-07-04 09:33 3488Android应用程序在使用很多功能的时候必须在Mainife ... -
ListView使用SimpleAdapter加载网络图片
2011-07-02 19:14 7713ListView是一种常见的布局,通过SimpleAdapte ... -
android:layout_gravity 和 android:gravity 的区别
2011-07-02 19:00 2103gravity 这个英文单词是重心的意思,在这里就表示 ... -
横竖屏切换时不销毁当前activity 和 锁定屏幕
2011-07-02 18:58 3630首先在Mainifest.xml的Activity元素 ... -
onSaveInstanceState和onRestoreInstanceState触发的时机
2011-07-02 17:49 2881当某个activity变得“容易”被系统销毁时,该ac ... -
strings.xml文件中提供占位符来格式化数据
2011-07-01 16:16 3235有些朋友可能会动态的修改Android中strings. ... -
ANDROID开机动画分析
2011-05-25 15:40 5928Android 2.0 开机动画文件分析。开机动画文件:boo ... -
Android专栏地址,真的不错啊!!!
2011-05-22 20:22 1657第三极: http://disanji.net/cate ... -
A1200入门DIY
2011-05-22 11:40 0A1200入门DIY 2007-04-16 19:33 ... -
android用户界面数据绑定
2011-05-19 21:25 5282当我们想用合适的方式显示并操作一些数据(如数组,链表,数据库等 ... -
emulator: ERROR: the user data image is used by another emulator. aborting
2011-05-19 13:48 2355今天早上起床,运行项目时报错:Error the use ... -
Android Map demo
2011-04-23 22:24 3398AndroidManifest.xml <?xm ... -
Android Map申请key
2011-04-23 22:02 31231. 首先先要获取你的debug keystore位置 ... -
conversion to dalvik format failed with error 1
2011-04-23 21:52 3473android低版本工程(如1.5)放到高版本环境中(如2.2 ... -
Android GPS基础
2011-04-20 22:14 2782package org.example.locationtes ... -
Android API:Activity.managedQuery()
2011-04-20 19:22 2628描述: 获取一个包含指定数据的 Cursor 对 ...
相关推荐
在Android开发中,SQLite是一个重要的组成部分,它是轻量级的数据库系统,被广泛用于本地数据存储。SQLite数据库在Android应用中扮演着至关重要的角色,它允许开发者创建、修改和管理数据库,无需用户干预,提供了...
Android 数据存储 SQLite Android 数据存储是 Android 应用程序中的一个重要组件,它负责存储和管理应用程序中的数据。在 Android 中,有多种数据存储方式,包括 SharedPreferences、内部文件存储、SD 卡存储和 ...
SQLite是一个轻量级的数据库,它是Android系统内置的数据库管理系统,特别适合于移动设备上的数据存储。本文将深入探讨Android中的SQLite数据存储,以及如何通过"日记本"应用的增删改查(CRUD)操作实例来实践这一...
在Android开发中,SQLite是一个非常重要的数据存储工具。SQLite是一个轻量级的、关系型的数据库,它嵌入到Android系统中,为应用程序提供本地数据存储功能。SQLite数据库的优势在于其小巧、快速、稳定,无需单独的...
"Android之SQLite实现增删改查" Android平台中,SQLite是一种轻量级的关系型数据库,广泛应用于移动应用开发中。在本例子中,我们将学习如何使用SQLite来实现增删改查操作。 标题解释 "Android之SQLite实现增删改...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite具有高效、可靠且易于集成的特点,使得它成为Android应用数据...
Android 平台中的 SQLite 数据库在存储 DateTime 类型的数据时会遇到一些问题。本文将详细介绍这些问题和解决方案。 日期类型数据的存储问题 ------------------------- 在 SQLite 中,日期类型数据的存储方式有...
"Android 手机 App 程序中 SQLite 数据存储应用" Android 手机 App 程序中 SQLite 数据存储应用是 Android 手机 App 程序开发中的一个重要组成部分。随着 IT 行业的高速发展,移动通信技术的更新速度日新月异。...
SQLite 直接访问其存储文件。 为什么要用 SQLite? 不需要一个单独的服务器进程或操作的系统(无服务器的)。 SQLite 不需要配置,这意味着不需要安装或管理。 一个完整的 SQLite 数据库是存储在一个单一的跨平台的...
本篇将详细讲解如何在Android应用中使用SQLite存储数据以及如何在SDCard(外部存储)上创建数据库。 首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过实现`SQLiteOpenHelper`的子类来完成。`...
### Android与SQLite简介 #### 一、SQLite简介 SQLite是一个高度灵活且强大的关系型数据库引擎,它被设计为一个轻量级的、嵌入式的解决方案。与其他常见的数据库系统不同,SQLite不需要单独的服务进程或管理员配置...
这是Android开发的一个例子,作为学习SQLite的一个样板。使用Android SQLite数据库实现联系人的增删改查功能,同时使用了ListView、Adapter来实现数据的列表显示,使用SearchView与Filter数据过滤器来实现搜索功能。
在Android开发中,SQLite是一个非常重要的组成部分,它是一款轻量级的数据库系统,用于存储应用程序中的结构化数据。SQLite数据库引擎被集成到Android系统中,为开发者提供了方便的数据管理方式,无需额外安装服务。...
在Android平台上,SQLite是默认的数据存储方式,尤其适合处理小到中等规模的数据量,如学生的个人信息、成绩、出勤等记录。 系统设计的核心在于数据库结构的规划。在学生信息管理系统中,可能包含以下几个核心表:...
在移动应用开发中,数据存储是不可或缺的一部分,尤其是在Android平台上,SQLite数据库被广泛用于本地数据管理。然而,随着隐私保护和数据安全的重要性日益凸显,如何对SQLite数据库进行加密,防止敏感信息泄露,就...
本资源"Android之SQLite数据存储.zip"提供了一个简单易懂的示例,帮助开发者理解和实践如何在Android Studio项目中使用SQLite进行数据的增删改查操作。 首先,让我们了解SQLite在Android中的基本概念: 1. **...
在Android应用开发中,SQLite是一个常用的轻量级数据库,它为数据存储提供了便利。然而,随着数据安全性的日益重要,对SQLite数据库进行加密是必要的,以保护敏感信息免受未授权访问。本篇文章将深入探讨如何在...
在 Android 开发中,SQLite 是一个常用的数据存储解决方案,尤其适合小型到中型的数据存储需求。SQLite 是一个轻量级的、嵌入式的关系型数据库,支持标准的 SQL 语法,使得在 Android 应用程序中进行数据管理变得...
在Android应用开发中,SQLite是一个内置的轻量级数据库,用于存储应用程序的数据。SQLite支持标准的关系型数据库功能,如创建、查询、更新和删除数据,是Android应用进行本地数据持久化的重要工具。`sqlite-android`...