- 浏览: 148074 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
flyingcatjj:
很适合我这种刚接触的
myeclipse xfire 开发webservice实例 -
tangzlboy:
非常好,非常详细,非常中用。
linux入门 -
yzz9i:
楼主说的很是详细。
myeclipse xfire 开发webservice实例 -
zqx888191:
很再理阿!
老程序员的教诲 -
simplecat123:
...
SQLite数据读取
1 业务类 sqlite版本管理类
package it.service; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * * 数据库版本控制类 * SQLiteOpenHelper是一个数据库版本的控制超类 * */ public class MangerDatabase extends SQLiteOpenHelper { private static final String name="shool"; private static final int version=2; /** * * @param context 上下文信息 * @param name 数据库名称 * @param CursorFactory factory 游标工厂 * @param version 数据库版本 * 执行数据参数的初始化工作 */ public MangerDatabase(Context context) { //调用超类的构造方法 super(context, name, null, version); } /** * 如果没有数据库中没有此表 就创建表结构 覆写超类的创建的方法 * 这个方法在超类中是一个只有方法体没有实现体的 * onCreate 创建方法 在用户执行调用获取用户数据库管理时例就已经执行 * 此方法是超类存在的 并且由 getWritableDatabase()这个方法调用的 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20), age INTEGER,xxx INTEGER)"); } /** * 执行更新 如果表存在 将执行更新操作 * oldVersion 老版本号 * newVersio 新版本号 * onUpgrade 创建方法 在用户执行调用获取用户数据库管理时例就已经执行 * 此方法是超类存在的 并且由 getWritableDatabase()这个方法调用的 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //先删除 db.execSQL("DROP TABLE IF EXISTS person");// //调用方法执行创建 onCreate(db); } }
2 业务类一
package it.service; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import it.bean.Person; /** * * 实体操作类 * rawQuery 执行sql查询 * execSQL 执行增删 改的sql * 由SQLiteOpenHelper 的继承类 MangerDatabase获取数据库管理实例 * 由SQLiteDatabase的对象去获取这个管理实例 * 这个对象可以执行rawQuery和execSQL方法 */ public class PersonService { private MangerDatabase dbmanger; public PersonService(Context context) { dbmanger=new MangerDatabase(context); } //保存 public void save(Person person){ /** * 打开数据库 取得数据操作对象 * getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。 * 但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写, * 倘若使用的是getWritableDatabase() 方法就会出错。 * getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败 * 当打开失败后会继续尝试以只读方式打开数据库。 * SQLiteDatabase sqlite数据库的管理类 */ SQLiteDatabase database= dbmanger.getWritableDatabase(); database.execSQL("insert into person(name,age) values(?,?)",new Object[]{person.getName(),person.getAge()}); } //更新 public void update(Person person) { SQLiteDatabase database= dbmanger.getWritableDatabase(); //execSQL是执行sql语句 database.execSQL("update person set name=?,age=? where personid=?",new Object[]{person.getName(),person.getAge(),person.getPersonId()}); } //根据id执行查询数据 public Person findbyid(Integer id) { SQLiteDatabase database= dbmanger.getWritableDatabase(); //Cursor是游标类 游标在数据库中其实就是一个数据集 Cursor cursor = database.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)}); if(cursor.moveToNext()){ Log.i("xxx", "xxx"+String.valueOf(cursor.getInt(3))); Person person=new Person(cursor.getInt(0),cursor.getString(1),cursor.getShort(2)); return person; } return null; } //删除 public void delete(Integer... ids) { if(ids.length>0){ StringBuilder sb = new StringBuilder(); for(Integer id : ids){ sb.append('?').append(','); } //删除最后一个字符 sb.deleteCharAt(sb.length()-1); SQLiteDatabase database= dbmanger.getWritableDatabase(); //execSQL是执行sql语句 database.execSQL("delete from person where personid in("+sb+")",(Object[])ids); } } //分页查询 一 public List<Person> getdatePerson(int startResult,int maxResult){ List<Person> persons=new ArrayList<Person>(); SQLiteDatabase database= dbmanger.getWritableDatabase(); //Cursor是游标类 游标在数据库中其实就是一个数据集 //rawQuery(String sql,String[]s) 参数一 是一个sql语句 参数二是参数一sql语句中条件的占位符所存的具体值,这些值是一个字符string数组 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; } //分页查询 二 public Cursor getdateRawPerson(int startResult,int maxResult){ // List<Person> persons=new ArrayList<Person>(); SQLiteDatabase database= dbmanger.getWritableDatabase(); //Cursor是游标类 游标在数据库中其实就是一个数据集 //rawQuery(String sql,String[]s) 参数一 是一个sql语句 参数二是参数一sql语句中条件的占位符所存的具体值,这些值是一个字符string数组 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= dbmanger.getWritableDatabase(); //Cursor是游标类 游标在数据库中其实就是一个数据集 Cursor cursor = database.rawQuery("select count(*) from person", null); if(cursor.moveToLast()){ return cursor.getLong(0); } return 0; } }
3 业务类二
package it.service; import java.util.ArrayList; import java.util.List; import it.bean.Person; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * 此类不需要基于sql语句 进行增删查改操作 * 但是SQLiteDatabase对象是通过内部构造sql语句而执行操作的 * */ public class PersonSQLservice { private MangerDatabase dbmanger; public PersonSQLservice(Context context) { dbmanger=new MangerDatabase(context); } public void save(Person person){ SQLiteDatabase database = dbmanger.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", person.getName()); values.put("age", person.getAge()); //参数 表名 构建insert语句的正确字段 字段映射 database.insert("person", "name", values); } public void update(Person person){ SQLiteDatabase database = dbmanger.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", person.getName()); values.put("age", person.getAge()); //参数 表名 更新映射关系 条件 占位符值 database.update("person", values, "personid=?" , new String[]{String.valueOf(person.getPersonId())}); } public Person find(Integer id){ SQLiteDatabase database = dbmanger.getWritableDatabase(); //执行查询 参数 表名 返回的字段 指定条件 指定条件值 是否分组 分组条件 是否排序 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){ StringBuilder sb = new StringBuilder(); String[] strIds = new String[ids.length]; for(int i=0 ; i < ids.length ; i++){ sb.append('?').append(','); strIds[i] = String.valueOf(ids[i]); } sb.deleteCharAt(sb.length()-1); SQLiteDatabase database = dbmanger.getWritableDatabase(); //参数 表名 指定条件 条件占位值 database.delete("person", "personid in("+ sb + ")", strIds); } } public List<Person> getScrollData(int startResult, int maxResult){ List<Person> persons = new ArrayList<Person>(); SQLiteDatabase database = dbmanger.getWritableDatabase(); //参数 表名 返回字段 指定条件 指定条件映射值 是否分组 分组条件 是否排序 分页条件 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 = dbmanger.getWritableDatabase(); Cursor cursor = database.query("person", new String[]{"count(*)"}, null, null, null, null, null); if(cursor.moveToNext()){ return cursor.getLong(0); } return 0; } }
4 测试类一
package it.date; import java.util.List; import it.bean.Person; import it.service.PersonService; import android.test.AndroidTestCase; import android.util.Log; /** * * 执行PersonService的测试 * */ public class PersonServiceTest extends AndroidTestCase { private static final String tag="PersonServiceTest"; public void testsave()throws Exception{ PersonService personservice=new PersonService(this.getContext()); for(int i=0;i<10;i++) { personservice.save(new Person("huhuanhuan",(short)33)); } } public void testfindbyid(){ PersonService personservice=new PersonService(this.getContext()); Person p=personservice.findbyid(1); Log.i(tag,p.toString()); } public void testupdate(){ Person person=new Person(1,"chun",(short)20); PersonService personservice=new PersonService(this.getContext()); personservice.update(person); Person p=personservice.findbyid(1); Log.i(tag,p.toString()); } public void testgetdatePerson(){ Person p=new Person(); PersonService personservice=new PersonService(this.getContext()); List<Person> list=personservice.getdatePerson(0, 10); for(int i=0;i<list.size();i++){ p=(Person)list.get(i); Log.i(tag,p.toString()); } } public void testgetcount(){ PersonService personservice=new PersonService(this.getContext()); long l=personservice.getcount(); Log.i(tag, String.valueOf(l)); } public void testdelete() { PersonService personservice=new PersonService(this.getContext()); personservice.delete(1,2,3); } }
5 测试类二
package it.date; import java.util.List; import it.bean.Person; import it.service.PersonSQLservice; import android.test.AndroidTestCase; import android.util.Log; /** * * 执行PersonSQLservice 进行测试 * */ public class PersonSQLserviceTest extends AndroidTestCase { private static final String TAG="PersonSQLserviceTest"; public void testsave(){ PersonSQLservice psql=new PersonSQLservice(this.getContext()); for(int i=0;i<10;i++) { psql.save(new Person("李渊", (short)1)); } } public void testFind() throws Exception{ PersonSQLservice psql=new PersonSQLservice(this.getContext()); Person person = psql.find(22); Log.i(TAG, person.toString()); } public void testUpdate() throws Exception{ PersonSQLservice psql=new PersonSQLservice(this.getContext()); Person person = psql.find(1); person.setName("liming"); psql.update(person); //Log.i(TAG, person.toString()); } public void testGetCount() throws Exception{ PersonSQLservice psql=new PersonSQLservice(this.getContext()); Log.i(TAG, String.valueOf(psql.getCount())); } public void testGetScrollData() throws Exception{ PersonSQLservice psql=new PersonSQLservice(this.getContext()); List<Person> persons = psql.getScrollData(0, 20); for(Person person : persons){ Log.i(TAG, person.toString()); } } public void testDelete() throws Exception{ PersonSQLservice psql=new PersonSQLservice(this.getContext()); psql.delete(1,2,3); } }
在做测试的时候 必须要对其应用进行配置
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="it.date" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" /> <activity android:name=".DataActivity" 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> <uses-sdk android:minSdkVersion="7" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="it.date" android:label="Tests for My App" /> </manifest>
6 视图界面文件一
<?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="fill_parent"> <TextView android:layout_width="40px" android:layout_height="wrap_content" android:textSize="20px" android:id="@+id/personid" /> <TextView android:layout_width="150px" android:layout_height="wrap_content" android:layout_toRightOf="@id/personid" android:layout_alignTop="@id/personid" android:gravity="center_horizontal" android:textSize="20px" android:id="@+id/name" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/name" android:layout_toRightOf="@id/name" android:gravity="right" android:textSize="20px" android:id="@+id/age" /> </RelativeLayout>
7 视图界面主文件 2
<?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" > <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/listview" /> </LinearLayout>
8 业务bean
package it.bean; /** * * 数据库的实体类 * */ public class Person { private Integer personId; private String name; private Short age; public Person() { } public Person(Integer personId, String name, Short age) { this.personId = personId; this.name = name; this.age = age; } public Person(String name, Short age) { this.name=name; this.age=age; } public Integer getPersonId() { return personId; } public void setPersonId(Integer personId) { this.personId = personId; } 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 [personId=" + personId + ", name=" + name + ", age=" + age + "]"; } }
9 主应用 Activity
package it.date; import it.bean.Person; import it.service.PersonService; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.util.Log; import android.view.View; 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 DataActivity extends Activity { private static final String TAG="DataActivity"; private ListView listview; private PersonService personservice; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取ListView listview=(ListView)this.findViewById(R.id.listview); //获取数据库德数据 personservice=new PersonService(this); /** *方法一 SimpleAdapter 适配器 绑定的参数数据是list对象 比较啰嗦 */ List<Person> persons=personservice.getdatePerson(9, 20); //绑定数据 设置适配器 List<HashMap<String,String>> list=new ArrayList<HashMap<String,String>>(); /** * 适配器有 ArrayAdapter<T> T 可以是String Integer * SimpleAdapter,SimpleCursorAdapter */ HashMap<String,String> hs=new HashMap<String,String>(); hs.put("personid", "编号"); hs.put("name", "名称"); hs.put("age", "年龄"); list.add(hs); for(Person person:persons){ HashMap<String,String> map=new HashMap<String,String>(); map.put("personid", String.valueOf(person.getPersonId())); map.put("name", person.getName()); map.put("age", String.valueOf(person.getAge())); list.add(map); } /** * 定义一个适配器 参数一 上下文信息 当前的上下文信息 是当前的类 * 参数二 加载的值 * 参数三 加载的视图界面文件 * 参数四 加载的目录 这个目录 是根据键值去取的值 在上面已经设置好了这个键值对 * 参数五 加载的数据对应的属性 */ SimpleAdapter adapter=new SimpleAdapter(DataActivity.this, list, R.layout.person,new String[]{"personid", "name","age"}, new int[]{R.id.personid,R.id.name,R.id.age}); //给这个ListView设置初始的适配器 listview.setAdapter(adapter); // 为ListView添加事件 listview.setOnItemClickListener(new OnItemClickListener() { /** * 参数一 表示 点击的 listview * 参数二 表示点击的最外层的那个元素 * 说明 int position, long id 是所在行的id */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ListView listView = (ListView)parent; //获取所在行的数据 position和id都表示选择的item数据 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"); //输出 01-17 14:54:47.919: INFO/DataActivity(9280): //className=android.widget.RelativeLayout Log.i(TAG, "className="+ view.getClass().getName()); Log.i(TAG, "personid="+ personid+ "name="+name + "age"+ age); Log.i(TAG, "result="+ (position==id)); //trues Log.i(TAG, "id="+id); Log.i("TAG", "position="+position); Toast.makeText(DataActivity.this, name.toString(), 1).show(); } }); /** * 方法二 获取 值 * 推荐使用方法二去设置适配器 获取数据的值 这样会更合理 * 绑定的数据是游标形式 但是主键id 必须以_id命名 如果不是 可以在查询数据的时候设置别名 并且绑定的参数必须是_id * 否则会报异常信息 */ // Cursor cursor = personservice.getdateRawPerson(0, 10); /** * 参数一 上下文信息 * 参数二 加载的视图界面文件 * 参数三 游标数据 * 参数四 数据目录 * 参数五 对应的数据值对应的id * 表示把参数五对应的字段 参数四绑定起来 * 注意 列名 必须指定为_id 如果你的数据的主键id 不是以_id命名 必须在查询的时候 指定 别名为_id 否则会报异常信息 */ // SimpleCursorAdapter ada = new SimpleCursorAdapter(this, R.layout.person, cursor, // new String[]{"_id", "name", "age"}, new int[]{R.id.personid, R.id.name, R.id.age}); //绑定适配器 // listview.setAdapter(ada); } }
ok 到这里就全部结束了 大家只要看懂了源代码 就完全明白了sqlite这种嵌入式的sql了
相关推荐
在IT行业中,数据库管理系统是数据存储和管理的关键组件,SQLite是一个轻量级、自包含的SQL数据库引擎,常用于嵌入式系统和移动应用。C#作为.NET框架的一部分,提供了丰富的库来与SQLite进行交互。本教程将详细介绍...
在这个"SaveData,SQLite保存读取数据源码"项目中,我们可以深入理解如何在实际应用中使用SQLite来实现数据的持久化。 首先,SQLite的核心操作包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据。在...
在这个项目中,它被用来创建Winform应用,处理数据读取和UI交互。 2. **SQLite数据库**:SQLite是一个轻量级的嵌入式数据库,无需单独的服务器进程,可以直接在应用中使用。在本项目中,我们使用SQLite连接数据库,...
虚拟列表读取Sqlite数据的核心在于实现CListCtrl的LVN_GETDISPINFO通知处理。这个通知会在控件需要显示某个项时发送,这时你需要根据传入的参数获取对应的数据并填充。通过Sqlite的API,你可以编写查询语句,动态从...
在实际应用中,SQLite文件读取工具可以帮助进行故障排查、数据迁移、数据库审计等工作。例如,当数据库出现损坏时,可以借助此类工具尝试恢复丢失的数据。此外,它也可以用于提取数据库中的敏感信息,以确保数据安全...
使用 SQLite 数据库可以实现数据的快速读取和写入,减少数据的丢失和损坏风险,同时也可以实现数据的安全性和可靠性。 4. 结论 SQLite 数据库在 Android 手机 App 程序中的应用非常广泛和重要。使用 SQLite 数据库...
在本教程中,我们将深入探讨如何使用PHP来读取SQLite数据库。 首先,要使用PHP访问SQLite数据库,你需要确保已经安装了PDO(PHP Data Objects)扩展,这是PHP连接不同数据库系统的抽象层,它包含了对SQLite的支持。...
总之,要将SQLite数据显示到ListView上,你需要执行以下步骤: 1. 创建SQLite数据库和表。 2. 从数据库查询数据并封装到自定义类。 3. 创建一个数据集(如ArrayList)来存储这些对象。 4. 在XML布局文件中添加...
SQLite是一个轻量级、自包含的数据库引擎,常用于桌面应用的数据存储。本篇文章将详细探讨如何在WPF应用中使用SQLite数据库来存储和读取二进制图片。 一、SQLite简介 SQLite是一款开源、无服务器、零配置、事务性的...
在C#编程环境下,可以利用.NET Framework提供的System.Data.SQLite库来操作SQLite数据库,包括读取.db数据文件。 这篇教程将详细介绍如何使用C#读取SQLite format 3的数据文件。首先,确保你已经在Visual Studio ...
本教程将详述如何在Android应用中读取SQLite数据库的数据并利用ListView进行展示。 首先,我们需要创建SQLite数据库。在Android中,我们通常通过扩展SQLiteOpenHelper类来实现,这个类帮助我们管理数据库的创建和...
本示例重点讲解了如何利用C#与SQLite数据库交互,特别是涉及到图片数据的存储和读取。 首先,我们需要在C#项目中引入SQLite的相关库。可以使用NuGet包管理器安装`System.Data.SQLite`,它提供了对SQLite数据库的...
本文将详细介绍如何使用Python读取TXT文件中的数据,并将其存储到SQLite3数据库中,同时也会涉及数据库的基本操作,如创建表、插入数据以及查询数据。 首先,我们需要导入`sqlite3`模块,这是Python标准库的一部分...
本教程将围绕“安卓SQLite数据库相关-android读取本地.db文件实现不变数据本地化”这一主题,探讨如何在Android应用中读取和使用本地SQLite数据库文件,以实现数据的本地化存储。 首先,要在Android应用中使用...
首先,文章指出传统的SQLite数据读取方式通常是通过简单的文本框显示数据,而本次讲解的是如何构建一个更复杂的、具有分页功能的表格控件。这个控件由两部分组成:表格区和分页栏。这两个部分都是基于GridView实现的...
自己写的业务工作用的一个资料查询实例,输入机号7088,可查询飞机公司代码和名称,并显示改飞机图片。用了zeos控件,这是个完整的sqlite桌面数据查询实例,图片以Bolb数据格式存储在数据库里,供初学参考。
总之,Android的SQLite分页读取通过合理使用`LIMIT`和`OFFSET`,结合自定义的适配器和用户交互,可以有效地管理和显示大量数据。在实际项目中,还需要根据具体需求进行相应的错误处理和性能优化。
本文将深入探讨如何使用C++进行Excel和SQLite数据库的读写操作,这是两个非常实用的技术点,特别是在数据处理和数据分析的场景中。 首先,C++读写Excel通常涉及到使用第三方库,如LibXL、Apache POI或OpenCV的...
在本例中,"SQLite数据查看器"是一个专门设计用于查看和操作SQLite数据库的工具,尤其适用于检查和分析手机QQ应用的数据。 首先,我们需要理解SQLite数据库的基本结构。SQLite数据库由一个或多个数据库文件组成,...
在IT领域,将SQLite3与XML结合使用可以实现数据的灵活读取和写入。 LIBXML 是一套用于处理XML文档的库,由GNU项目开发。它提供了解析XML、验证XML Schema、XPath支持以及XSLT转换等功能。在Python等编程语言中,...