編輯:關於Android編程
聲明:主要是對sqlite的使用做一下簡單的匯總。
首先建立數據庫和建立數據表
[html]
/**
* @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);
}
}
/**
* @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來對應表中的內容:
[html]
/**
* @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());
}
}
/**
* @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的不同)
[html] view plaincopyprint?
/**
* @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: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;
}
}
最後使用單元測試來測試功能:
[html] view plaincopyprint?
/**
* @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;
}
}
/**
* @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;
}
}
好了,總結就這麼多了。
需要改變下拉狀態欄的背景色。關於這方面的代碼路徑 frameworks/base/packages/SystemUI中通過androidSDK自帶的工具uiautomat
使用命令行創建項目cordova 創建項目的命令是cordova create 第一個參數 < dir >:項目目錄文件夾的名稱第二個參數< packa
1、概述 相信做Android開發的寫得最多的就是ListView,GridView的適配器吧,記得以前開發一同事開發項目,一個項目下來基本就一直在寫Lis
今天我們一起通過一個小例子來學習一下使用PULL解析器解析XML文件。 (1)首先我們放一個文件名為beauties.xml的XML文件到assets目錄下,文件內容如下