Android SQLite数据库操作
2014-05-30 23:29
417 查看
Android定义了一个很方便的Sqlite操作类SQLiteOpenHelper...我们不再需要加载驱动而且要手写关闭一大堆PrepareStatement,Connection等等...
定义personDataAccessObject..这是第一种写DAO的方法。---手写SQL语句
这是第二种写DAO的方法,Android已经为我们写好了SQL的操作,如果不记得SQL语句或者害怕出错,建议用这种方法
其中的Person数据模型(Bean):
Android单元测试:
为了方便的查看DataBase的值, ADB提供了sqlite3工具
使用方法adb shell
sqlite3 xxx.db
package com.example.db; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { /** * 构造方法 * @param context 上下文 * @param name 数据库名称 * @param factory 使用什么游标,传null是使用默认游标 * @param version 版本,最小是1 */ public PersonSQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } /** * 数据库第一次被创建的时候调用的方法 */ @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("create table person (id integer primary key autoincrement, name varchar(20),number varchar(20),account varchar(20))"); } /** * 只有在数据库版本发生变化的时候调用 * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
定义personDataAccessObject..这是第一种写DAO的方法。---手写SQL语句
package com.example.dao; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.example.db.PersonSQLiteOpenHelper; import com.example.domain.Person; public class PersonDAO { private PersonSQLiteOpenHelper helper; // 在构造方法完成helper的初始化 public PersonDAO(Context context) { super(); this.helper = new PersonSQLiteOpenHelper(context, "person.db", null, 1); } /** * 添加一条记录到数据库 * * @param name * 姓名 * @param number * 电话 */ public void add(String name, String number) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into person (name,number) values (?,?);", new Object[] { name, number }); db.close(); } /** * 查询记录 * * @param name * @return true 查询结果存在 , false 查询结果不存在 */ public boolean findPersonByName(String name) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from person where name = ?", new String[] { name }); boolean result = cursor.moveToNext(); cursor.close(); db.close(); return result; } /** * 修改一条记录 * * @param name * 修改人的姓名 * @param newnumber * 修改后密码 */ public void updatePersonByName(String name, String newnumber) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("update person set number=? where name = ?", new Object[] { newnumber, name }); db.close(); } public void deletePersonByName(String name) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("delete from person where name = ?", new Object[] { name }); db.close(); } public List<Person> getAll() { SQLiteDatabase db = helper.getWritableDatabase(); List<Person> persons = new ArrayList<Person>(); Cursor cursor = db.rawQuery("select * from person", null); while (cursor.moveToNext()) { int id = cursor.getInt(0); String name = cursor.getString(1); String number = cursor.getString(2); Person person = new Person(id, name, number); persons.add(person); } cursor.close(); db.close(); return persons; } }
这是第二种写DAO的方法,Android已经为我们写好了SQL的操作,如果不记得SQL语句或者害怕出错,建议用这种方法
package com.example.dao; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.example.db.PersonSQLiteOpenHelper; import com.example.domain.Person; public class PersonDAO2 { private PersonSQLiteOpenHelper helper; // 在构造方法完成helper的初始化 public PersonDAO2(Context context) { super(); this.helper = new PersonSQLiteOpenHelper(context, "person.db", null, 1); } /** * 添加一条记录到数据库 * * @param name * 姓名 * @param number * 电话 */ public long add(String name, String number) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); long id = db.insert("person", null, values); db.close(); return id; } /** * 查询记录 * * @param name * @return true 查询结果存在 , false 查询结果不存在 */ public boolean findPersonByName(String name) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.query("person", null, "name=?", new String[] { name }, null, null, null); boolean result = cursor.moveToNext(); cursor.close(); db.close(); return result; } /** * 修改一条记录 * * @param name * 修改人的姓名 * @param newnumber * 修改后密码 */ public int updatePersonByName(String name, String newnumber) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("number", newnumber); int number = db.update("person", values, "name=?", new String[] {}); db.close(); return number; } public int deletePersonByName(String name) { SQLiteDatabase db = helper.getWritableDatabase(); int number = db.delete("person", "name=?", new String[] { name }); db.close(); return number; } public List<Person> getAll() { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.query("person", null, null, null, null, null, null); List<Person> persons = new ArrayList<Person>(); while (cursor.moveToNext()) { int id = cursor.getInt(0); String name = cursor.getString(1); String number = cursor.getString(2); Person person = new Person(id, name, number); persons.add(person); } return persons; } }
其中的Person数据模型(Bean):
package com.example.domain; public class Person { private int id; private String name; private String number; public Person(int id, String name, String number) { super(); this.id = id; this.name = name; this.number = number; } public int getId() { return id; } public String getName() { return name; } public String getNumber() { return number; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setNumber(String number) { this.number = number; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", number=" + number + "]"; } }
Android单元测试:
package com.example.test; /** * 如果不想每次都getAll() * sqlite3の使用 */ import java.util.List; import android.test.AndroidTestCase; import com.example.dao.PersonDAO; import com.example.dao.PersonDAO2; import com.example.db.PersonSQLiteOpenHelper; import com.example.domain.Person; public class TestPersonDB extends AndroidTestCase { public void testCreateDB() throws Exception { PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext(),"person.db",null,1); helper.getWritableDatabase(); } public void testAdd() throws Exception{ PersonDAO dao = new PersonDAO(getContext()); for(int i = 123131121;i<123131121+20;i++) dao.add("w5", i+""); } public void testFindPersonByName() throws Exception{ PersonDAO dao = new PersonDAO(getContext()); boolean result = dao.findPersonByName("w5"); AndroidTestCase.assertEquals(result, true); } public void testGetAll() throws Exception{ PersonDAO dao = new PersonDAO(getContext()); List<Person> all = dao.getAll(); System.out.println(all); } public void testUpdateByName() throws Exception{ PersonDAO dao = new PersonDAO(getContext()); dao.add("w5", "110" + ""); } public void testDeleteByName() throws Exception{ PersonDAO dao = new PersonDAO(getContext()); dao.deletePersonByName("w5"); } }
为了方便的查看DataBase的值, ADB提供了sqlite3工具
使用方法adb shell
sqlite3 xxx.db
相关文章推荐
- Android下SQLite3数据库操作笔记(二)之-SQLiteOpenHelper
- Android SQLite数据库操作
- android数据库操作出现的 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
- android sqlite数据库的操作
- android数据库SQLite操作实例
- Android获取操作数据库的SQLiteDatabase实例
- 【转】Android获取用于操作数据库的SQLiteDatabase实例【学习记录】
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —添加检索操作(Retrieve)
- SQLite Android嵌入式数据库操作
- Android sqlite数据库操作通用框架AHibernate(三)-升级为1.1版本
- android SQLite数据库基本操作示例
- Android sqlite数据库操作通用框架AHibernate(二)源码-用于交流
- android SQLiteOpenHelper操作数据库 搜索关键字列表应用
- android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLITE ,CURSOR操作,CURSOR适配器,SQLITEHELPER,数据库设计模式
- 【转载】Using SQLite from Shell in Android(在shell 下使用sqlite命令操作数据库)
- android SQLite数据库基本操作示例
- Android sqlite数据库操作通用框架AHibernate(一)-CRUD示例和使用步骤
- Android 操作 Sqlite3数据库
- android数据库操作 sqlite returned: error code = 14, msg = cannot open file at source line 25502