SQLite
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。至今已经有12个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
一、界面
二、程序包结构
三、layout中包含2给配置文件,main.xml(里面包含一个ListView控件)和person.xml(与ListView对应的TextView)
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/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" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="编号" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="姓名" android:textSize="18sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="年龄" android:textSize="18sp" /> </LinearLayout> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
person.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/id" android:layout_width="120px" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_margin="3dip" android:text="TextView" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/name" android:layout_width="180px" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_margin="3dip" android:layout_toRightOf="@+id/id" android:text="TextView" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/age" android:layout_width="50px" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_margin="3dip" android:layout_toRightOf="@+id/name" android:text="TextView" android:textAppearance="?android:attr/textAppearanceLarge" /> </RelativeLayout>
四、AndroidManifest.xml,配置了Android单元测试
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.e276.db" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <!-- Android配置单元测试 --> <uses-library android:name="android.test.runner" /> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- Android配置单元测试 --> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="org.e276.db" /> </manifest>
五、entity
package org.e276.entity; /** * 实体类 * * @author miao * */ public class Person { private Integer id; private String name; private Integer age; public Person() { super(); } public Person(Integer id, String name, Integer 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 Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
六、dao,带一dao辅助类
DBHelper.java
package org.e276.dao; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * 数据库辅助类 * * @author miao * */ public class DBHelper extends SQLiteOpenHelper { /* * @param context 上下文 * * @param name 数据库名字 * * @param factory 游标工厂对象,没指定就设置为null * * @param version 版本号 */ // public DBHelper(Context context, String name, CursorFactory factory, // int version) { // super(context, name, factory, version); // } private static final String DB_NAME = "ali.db"; private static final int VERSION = 1; public DBHelper(Context context) { super(context, DB_NAME, null, VERSION); } /** * 第一次运行的时候创建 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name text, age INTEGER)"); } /** * 更新的时候 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS person"); onCreate(db); } }
PersonDao.java
package org.e276.dao; import java.util.ArrayList; import java.util.List; import org.e276.entity.Person; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * 实现类 * @author miao * */ public class PersonDao { // 辅助类属性 private DBHelper helper; /** * 带参构造方法,传入context * * @param context */ public PersonDao(Context context) { helper = new DBHelper(context); } /** * 使用不同的方法删除记录1到多条记录 * * @param ids */ public void delete(Integer... ids) { String[] c = new String[ids.length]; StringBuffer sb = new StringBuffer(); if (ids.length > 0) { for (int i = 0; i < ids.length; i++) { sb.append('?').append(','); // 把整数数组转换哼字符串数组 c[i] = ids[i].toString(); } // 删除最后一个元素 sb.deleteCharAt(sb.length() - 1); } SQLiteDatabase db = helper.getWritableDatabase(); db.delete("person", "personid in (" + sb.toString() + ")", c); db.close(); } /** * 添加纪录 * * @param person */ public void save(Person person) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into person (name,age) values(?,?)", new Object[] { person.getName(), person.getAge() }); db.close(); } /** * 根据id查找 * * @param id * @return */ public Person find(Integer id) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from person where personid=?", new String[] { String.valueOf(id) }); if (cursor.moveToNext()) { return new Person(cursor.getInt(0), cursor.getString(1), cursor.getInt(2)); } return null; } /** * 查找所有的记录 * * @return */ public List<Person> getAll() { List<Person> persons = new ArrayList<Person>(); SQLiteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person", null); while (cursor.moveToNext()) { persons.add(new Person(cursor.getInt(0), cursor.getString(1), cursor.getInt(2))); } return persons; } /** * 查询全部 * * @return 游标 */ public Cursor getAllPerson() { SQLiteDatabase db = helper.getReadableDatabase(); // ListView 里的id是有个下划线的,所以这里要给个别名_id Cursor cursor = db.rawQuery( "select personid as _id, name,age from person", null); // 这里数据库不能关闭 return cursor; } }
六、Activity类
package org.e276.db; import org.e276.dao.PersonDao; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class MainActivity extends Activity { // 声明ListView对象 private ListView listView; // Dao private PersonDao personDao; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获得listview listView = (ListView) findViewById(R.id.listView); // 实例化dao personDao = new PersonDao(this); // 得到所有的记录 Cursor cursor = personDao.getAllPerson(); /* * 参数作用:context:显示数据的layout,游标:显示的列名(一定要包含_id),显示的控件id名 */ SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.person, cursor, new String[] { "_id", "name", "age" }, new int[] { R.id.id, R.id.name, R.id.age }); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListView lst = (ListView) parent; // 得到其中的一行 SQLiteCursor cursor = (SQLiteCursor) lst .getItemAtPosition(position); Toast.makeText(MainActivity.this, cursor.getString(1) + "被选中", Toast.LENGTH_SHORT).show(); } }); } }
七、test类,导入JUnit3包
package org.e276.test; import java.util.List; import java.util.Random; import org.e276.dao.PersonDao; import org.e276.entity.Person; import android.database.Cursor; import android.test.AndroidTestCase; import android.util.Log; /** * 测试类 用的是JUnit3,用4可能会报错 * * @author miao * */ public class TestPersonDao extends AndroidTestCase { PersonDao personDao = new PersonDao(getContext()); @Override protected void setUp() throws Exception { personDao = new PersonDao(getContext()); } /** * 保存 */ public void testSave() { for (int i = 1; i <= 30; i++) { personDao.save(new Person(-1, "用户" + i, new Random().nextInt(100))); } } /** * 根据id查找 */ public void testFind() { Person person = personDao.find(1); Log.i("tag", person.toString()); } /** * 查找全部 集合 */ public void testFindAll() { List<Person> persons = personDao.getAll(); for (Person person : persons) { Log.i("tag", person.toString()); } } /* * 使用命令行查看内嵌数据库 在DOS下输入adb shell,或在sdk下的adb.exe下输入该命令 * * Sqliteman 这个工具,可以打开db文件 */ /** * 查找全部 游标 */ public void testGetAll() { Cursor cursor = personDao.getAllPerson(); while (cursor.moveToNext()) { StringBuffer sb = new StringBuffer(); sb.append("ID:" + cursor.getInt(0)); sb.append("\t用户名:" + cursor.getString(1)); sb.append("\t年龄:" + cursor.getInt(2)); Log.i("person", sb.toString()); } } /** * 测试删除多条记录 */ public void testDelete(){ personDao.delete(2,5,9); } }
测试时,先运行save方法,向数据库循环添加纪录
运行其他方法时,例如testFind(),可以在LogCat里查看得到,前提是添加过滤器。
八、查看添加了的数据,可以运行app直接查看,又可以在dos控制台下输入命令查看
使用dir命令查看目录结构,然后用cd 目录名进入该目录,直到找到sdk里面的adb.exe为止。
接着使用adb shell命令,打开,出现“#”号代表已经打开了该程序。
ls 代表查看目录。
.help代表查看帮助命令,.tables代表查看数据库的表。
出现sqlite的时候代表可以使用SQL查询语句,增删改都会对数据库产生作用。
命令参考图,来自度娘
查询的结果(控制台中出现乱码是正常的,并不影响真正的查询结果):
九、demo
相关推荐
这个压缩包文件"Android源码——数据库SQLite.zip"可能包含了关于Android中SQLite数据库的源码分析、使用示例以及相关的图像资源,如1-120912223R80-L.png,可能用于解释或展示SQLite在Android中的工作原理。...
3. **内容提供者(Content Provider)**: 虽然不是必须的,但如果你想在多个应用之间共享SQLite数据库的数据,或者使用Android系统的其他组件(如意图Intent)访问数据,可以使用内容提供者。它是Android系统中数据...
本资料包“安卓Android源码——连接SQLite数据库源码.zip”包含了关于如何在Android应用中连接和操作SQLite数据库的具体源代码示例。 首先,我们来看“源码说明.txt”,这应该包含了对源码的详细解释和使用指导。...
总的来说,Android连接SQLite数据库涉及的内容包括:`SQLiteOpenHelper`的使用,数据库版本管理,SQL语句的编写,ContentProvider的实现,以及数据操作的方法。这些知识点构成了Android应用中数据持久化的基础,对于...
Android 绿豆通讯录( SQLite数据库 + ListView数据展示控件 ) https://blog.csdn.net/weixin_44949135/article/details/106029404 采用 SQLite数据库 + ListView数据展示控件,可将用户添加的所有信息,分条...
【标题】"安卓Android源码——数据库SQLite.zip" 提供的内容主要聚焦于Android操作系统中用于数据存储的SQLite数据库。SQLite是一个轻量级的关系型数据库,它被广泛集成在移动设备和嵌入式系统中,包括Android。这个...
这个“Android——LitePal操作数据库的案例”提供了全面的学习材料,涵盖了从基本的数据库操作到更复杂的场景应用。 首先,我们要理解LitePal的核心功能。LitePal提供了一个快速、方便的方式来映射Java对象到SQLite...
在本项目中,开发者实施了一个基于Android平台的记单词应用,使用SQLite数据库作为数据存储解决方案。以下是关于Android开发和SQLite数据库的关键知识点: 1. **SQLite数据库**:SQLite是Android系统内置的关系型...
### Android开发中使用SQLite数据库详解 #### SQLite简介与特性 SQLite是全球广泛采用的嵌入式数据库系统之一,尤其在移动应用开发领域占有重要地位。它以轻量级、高性能和开源性著称,适用于资源有限的环境。许多...
在本实验“安卓开发实验6——SQLite和SQLiteDatabase应用”中,我们将深入学习如何在Android应用程序中集成SQLite数据库来存储和检索数据,特别是新闻信息。我们将使用ListView组件来动态地展示这些新闻内容,提供...
本压缩包文件“Android代码(sqlite数据库下).zip”包含了一个关于SQLite在Android应用中的实践示例——"Pro09(sqlite数据库)",让我们深入探讨其中的知识点。 首先,SQLite在Android中的使用涉及到以下几个核心...
在Android开发中,SQLite是一个非常重要的组件,它是...总之,SQLiteSpy是一个强大的SQLite数据库管理和调试工具,对于Android开发者来说,它能够极大地提升数据库操作的效率和便利性,帮助优化应用的性能和数据管理。
在Android开发中,SQLite数据库是广泛使用的轻量级数据库,它为应用程序提供了存储和检索结构化数据的能力。SQLiteManager是Android系统中用于管理SQLite数据库的一个重要工具,其源码对于理解数据库操作、数据存储...
SQLiteManager是Android中用于管理SQLite数据库的工具类,它提供了创建、查询、更新和删除数据库表等操作的接口。这份"Android源码——SqliteManager 源码.zip"包含了一些关于SqliteManager的源代码分析以及可能的...
总的来说,通过学习和使用如EncryptedSqliteDemo这样的示例,开发者能够了解并掌握在Android应用中实现SQLite数据库加密的方法,从而增强数据的安全性。在实际项目中,结合良好的编码实践和安全策略,可以进一步提升...
"Inject增加sqlite3数据库映射注解(ORM)"是一个关于如何在Android项目中使用对象关系映射(ORM)技术来简化SQLite数据库操作的主题。ORM允许开发者用面向对象的方式来处理数据库,减少了直接操作SQL语句的工作量,...
本篇文章将深入探讨如何在Android中进行SQLite数据库的操作,以实现一个简单的通信录应用为例。 首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过扩展`SQLiteOpenHelper`类来完成。`...
Android提供了SQLite数据库系统,这是一个轻量级的、嵌入式的关系型数据库,适用于移动设备。本实例将深入探讨如何在Android中操作SQLite数据库。 首先,我们需要创建一个SQLite数据库。在Android中,通常通过扩展...