每日一贴,今天的内容关键字为方法数据库
声明:主要是对sqlite的使用做一下简单的汇总。
首先建立数据库和建立数据表
/** * @FILE:DBOpenHelper.java * @AUTHOR:Administrator * @DATE:2013-5-14 下昼10:06:29 **/ package com.yehui.service; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; /******************************************* * * @CLASS:DBOpenHelper * @DESCRIPTION:sqlite数据库必须继承SQLiteOpenHelper(抽象类) * @AUTHOR:Administrator * @VERSION:v1.0 * @DATE:2013-5-14 下昼10:06:29 *******************************************/ public class DBOpenHelper extends SQLiteOpenHelper { /** * create a instance DBOpenHelper. * * @param context * 上下文对象 * @param name * 数据库名称 * @param factory * CursorFactory * @param version * 版本号(第一次生成数据库时,版本号是1,只执行一次) */ public DBOpenHelper(Context context) { super(context, "yehui.db", null, 1); } /* * (non-Javadoc)当创立数据库的时候就会创立上面的表,可以在这里创立多张表:表中的字段的类型可以完整没有, * varchar(20)长度并不能限制。可以输入超越20字符的长度。 * * @see * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite * .SQLiteDatabase) */ @Override public void onCreate(SQLiteDatabase db) { String sql = "create table person(personid integer primary key autoincrement, name varchar(20))"; // 执行这句sql db.execSQL(sql); } /* * (non-Javadoc)对数据库更新,可以在这个方法里头对数据表做alter.:也就是说当 super(context, "yehui.db", * null, 1);这里头的版本号发生改变的时候就会调用这个方法,执行完成后将数据库的版本号设置为新的版本号 * * @see * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite * .SQLiteDatabase, int, int) */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "ALTER TABLE PERSON ADD PHONE VARCHAR(12) NULL"; db.execSQL(sql); } }
其次,为了方法建立一个bean来对应表中的内容:
/** * @FILE:Person.java * @AUTHOR:Administrator * @DATE:2013-5-14 下昼10:31:18 **/ package com.yehui.entity; /******************************************* * * @CLASS:Person * @DESCRIPTION:bean * @AUTHOR:Administrator * @VERSION:v1.0 * @DATE:2013-5-14 下昼10:31:18 *******************************************/ public class Person { private Integer id; private String name; private String phone; public Person(String name, String phone) { this.name = name; this.phone = phone; } public Person(Integer id, String name, String phone) { super(); this.id = id; this.name = name; this.phone = phone; } public Person() { super(); } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]"; } 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 String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public static void main(String[] args) { Person person = new Person("yehui", "132"); System.out.println(person.toString()); } }
再次:建立一个service类来处置业务逻辑(注意两种不同的操作方法使用sql的不同)
/** * @FILE:PersonService.java * @AUTHOR:Administrator * @DATE:2013-5-14 下昼10:41:47 **/ package com.yehui.service; 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 android.util.Log; import com.yehui.entity.Person; /******************************************* * * @CLASS:PersonService * @DESCRIPTION:对person进行增删改查操作 * @AUTHOR:Administrator * @VERSION:v1.0 * @DATE:2013-5-14 下昼10:41:47 *******************************************/ public class PersonService { private DBOpenHelper dbOpenHelper; public final static String TAG = "PersonService"; /** * create a instance PersonService. 会创立数据库 * * @param context */ public PersonService(Context context) { super(); this.dbOpenHelper = new DBOpenHelper(context); } /** * @description:保存 * @author:Administrator * @return:void * @param person */ public void save(Person person) { // 如果数据表不存在先创立数据表,存在,则不创立 SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); // SQLiteDatabase db1 = dbOpenHelper.getWritableDatabase();这个和 // SQLiteDatabase db是同一个对象 // 方法1 // 使用?。参数形式 // db.execSQL("insert into person(name,phone) values(?,?)", new Object[] // { // person.getName(), person.getPhone() }); // 或者使用sqlite自带的操作方法 // 方法2 ContentValues values = new ContentValues(); values.put("name", person.getName()); values.put("phone", person.getPhone()); db.insert("person", null, values); // 注意这里的第二个参数(表的字段名)。db.insert("person", "personid", // null);也就说新增一条记录,id是null:这个语句不会报错,只会按自增的id新增一条记录 } /** * @description:按照id删除数据 * @author:Administrator * @return:void * @param id */ public void delete(Integer id) { // 如果数据表不存在先创立数据表,存在,则不创立 SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); // 方法1 // 使用?。参数形式 // db.execSQL("delete from person where personid=?", new Object[] { id // }); // 方法2 db.delete("person", "personid=?", new String[] { id.toString() }); } public void update(Person person) { // 如果数据表不存在先创立数据表,存在,则不创立 SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); // 方法1 // 使用?。参数形式 // db.execSQL("update person set name=?,phone=? where personid=? ", new // Object[] { person.getName(),person.getPhone(),person.getPersonid() // }); // 方法2 ContentValues values = new ContentValues(); values.put("name", person.getName()); values.put("phone", person.getPhone()); db.update("person", values, "personid=?", new String[] { person.getId() .toString() }); } /** * @description:依照id查找数据 * @author:Administrator * @return:Person * @param id * @return */ public Person find(Integer id) { Person person = null; // 如果数据表不存在先调用getReadableDatabase方法,存在,则不创立 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); // 方法1 // 使用?。参数形式 // Cursor cursor = db.rawQuery("select * from person where personid=?", // new String[] { id.toString() }); // 方法2 Cursor cursor = db.query("person", null, "personid=?", new String[] { id.toString() }, null, null, null); // 如果找到一个result,则返回result if (cursor.moveToFirst()) { person = new Person(); person.setId(cursor.getColumnIndex("personid")); person.setName(cursor.getString(cursor.getColumnIndex("name"))); person.setPhone(cursor.getString(cursor.getColumnIndex("phone"))); } Log.v(TAG, person.toString()); cursor.close(); return person; } /** * @description:分页查询 * @author:Administrator * @return:List<Person> 结果 * @param offset * 跳过几条数据 * @param maxResult * 总共查找几条数据 * @return */ public List<Person> getScrollData(Integer offset, int maxResult) { List<Person> persons = new ArrayList<Person>(); // 如果数据表不存在先调用getReadableDatabase方法,存在,则不创立 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); // 方法1 // 使用?。参数形式 // Cursor cursor = db.rawQuery( // "select * from person order by personid asc limit ?,?", // new String[] { String.valueOf(offset), // String.valueOf(maxResult) }); // 方法2 Cursor cursor = db.query("person", null, null, null, null, null, "personid asc", offset + "," + maxResult); // 循环将结果加入到list中 while (cursor.moveToNext()) { Person person = new Person(); person.setId(cursor.getColumnIndex("personid")); person.setName(cursor.getString(cursor.getColumnIndex("name"))); person.setPhone(cursor.getString(cursor.getColumnIndex("phone"))); persons.add(person); } cursor.close(); // Log.v(TAG, person.toString()); return persons; } /** * @description:获得记录的总数 * @author:Administrator * @return:long * @return */ public long getCount() { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); // 方法1 // Cursor cursor = db.rawQuery("select count(*) from person", null); // 方法2 Cursor cursor = db.query("person", new String[] { "count('*')" }, null, null, null, null, null, null); cursor.moveToFirst(); // 获得第一个字段的全部记录数 long count = cursor.getLong(0); cursor.close(); Log.v(TAG, "记录总数" + count); return count; } }
最后使用单元测试来测试功能:
/** * @FILE:DBTest.java * @AUTHOR:Administrator * @DATE:2013-5-14 下昼11:52:06 **/ package com.yehui.db; import java.util.List; import android.app.Activity; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.test.AndroidTestCase; import android.view.Menu; import com.yehui.entity.Person; import com.yehui.service.DBOpenHelper; import com.yehui.service.PersonService; /******************************************* * * @CLASS:DBTest * @DESCRIPTION:sqlite单元测试必须继承AndroidTestCase * @AUTHOR:Administrator * @VERSION:v1.0 * @DATE:2013-5-14 下昼11:52:06 *******************************************/ public class DBTest extends AndroidTestCase { private DBOpenHelper dbOpenHelper; private SQLiteDatabase sqliteDatabase; public void createDB() { dbOpenHelper = new DBOpenHelper(this.getContext()); // 创立数据表 sqliteDatabase = dbOpenHelper.getWritableDatabase(); } public void save() { PersonService personService = new PersonService( this.getContext()); Person person = new Person("zhangxueyou", "123456"); personService.save(person); } public void delete() { PersonService personService = new PersonService( this.getContext()); personService.delete(2); } public void update() { PersonService personService = new PersonService( this.getContext()); Person person = personService.find(1); person.setName("guofucheng"); personService.update(person); } public Person find() { PersonService personService = new PersonService( this.getContext()); Person person = personService.find(1); return person; } public List<Person> getScrollData() { PersonService personService = new PersonService( this.getContext()); List<Person> persons = personService.getScrollData(0, 2); return persons; } public long getCount() { PersonService personService = new PersonService( this.getContext()); long count = personService.getCount(); return count; } }
好了,总结就这么多了。
文章结束给大家分享下程序员的一些笑话语录:
面试官:熟悉哪种语言
应聘者:JAVA
面试官:知道什么叫类么
应聘者:我这人实在,工作努力,不知道什么叫累
面试官:知道什么是包?
应聘者:我这人实在 平常不带包 也不用公司准备了
面试官:知道什么是接口吗?
应聘者:我这个人工作认真。从来不找借口偷懒
面试官:知道什么是继承么
应聘者:我是孤儿没什么可以继承的
面试官:知道什么叫对象么?
应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
面试官:知道多态么?
应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??