移動端Android開發,我們使用的是sqlite數據庫,這是一個輕量級的數據庫,我們在使用的時候,甚至不想mysql等數據庫一樣加載驅動啊,在androidsdk中,都已經幫我們做好了,我們只需要用就好了,下面介紹一下使用方法,
首先,我們需要建一個類來繼承SQLiteOpenHelper,並重寫PersonSQLiteOpenHelper與oncreate方法即可,前者是建立一個的名字,後者是建立數據庫結構的腳本,這兩個方法會在數據庫第一次創建的時候,調用。建好了,就不再調用了。
/**
* 數據庫的構造方法,用來定義數據庫的名稱,數據庫的查詢的結果集,數據庫版本。
* @param context
*/
//factory ,游標工廠,設置位null,version數據庫版本。
public PersonSQLiteOpenHelper(Context context) {
super(context, "person.db", null, 1);
}
/**
* 數據庫第一次創建的時候,調用的方法
* db:被創建的數據,
*/
@Override
public void onCreate(SQLiteDatabase db) {
//初始化數據庫的表結構。
db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");
}
數據庫建好了,我們接下來要實現數據庫的曾刪改查的一些操作了,這時我們可以選擇sql腳本或者google工程師封裝好的api進行
public class PersonDao {
private PersonSQLiteOpenHelper helper;
public PersonDao(Context context){
helper = new PersonSQLiteOpenHelper(context);
}
public void add(String name,String number){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into person (name,number) values (?,?)",new Object[]{name,number});
// db.execSQL(sql, bindArgs)
db.close();
}
public boolean find(String name){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name});
//默認的結果集是指到第一個行,是空的,
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
//修改number
public void update(String name,String number){
SQLiteDatabase db = helper.getReadableDatabase();
db.execSQL("update person set number =? where name = ?",new Object[]{number,name});
db.close();
}
public void delete(String name){
SQLiteDatabase db = helper.getReadableDatabase();
db.execSQL("delete from person where name = ?", new Object[]{name});
}
public List<Person> findAll(){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person", null);
List<Person> persons = new ArrayList<Person>();
while(cursor.moveToNext()){
//0
// int id = cursor.getInt(0);
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(1);
String number = cursor.getString(2);
Person p = new Person(id, name, number);
persons.add(p);
}
cursor.close();
db.close();
return persons;
}
}
public class PersonDaoApi {
private PersonSQLiteOpenHelper helper;
public PersonDaoApi(Context context){
helper = new PersonSQLiteOpenHelper(context);
}
public long add(String name,String number){
SQLiteDatabase db = helper.getWritableDatabase();
//db.execSQL("insert into person (name,number) values (?,?)",new Object[]{name,number});
ContentValues values = new ContentValues();
values.put("name", name);
values.put("number", number);
//返回結果>-1,表示成功的。
long result = db.insert("person", null, values);
db.close();
return result;
}
public boolean find(String name){
SQLiteDatabase db = helper.getReadableDatabase();
//Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name});
//db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy)
// columes=null,反悔所有列。
Cursor cursor = db.query("person", null, "name=?", new String[]{name}, null, null, null);
//默認的結果集是指到第一個行,是空的,
boolean result = cursor.moveToNext();
cursor.close();
db.close();
return result;
}
//修改number
public int update(String name,String number){
SQLiteDatabase db = helper.getReadableDatabase();
//db.execSQL("update person set number =? where name = ?",new Object[]{number,name});
ContentValues values = new ContentValues();
values.put("number", number);
//影響多少行,
int row = db.update("person", values, "name=?", new String[]{name});
db.close();
return row;
}
public int delete(String name){
SQLiteDatabase db = helper.getReadableDatabase();
// db.execSQL("delete from person where name = ?", new Object[]{name});
//影響的行數,》0 及成功
int row = db.delete("person", "name=?", new String[]{name});
db.close();
return row;
}
public List<Person> findAll(){
SQLiteDatabase db = helper.getReadableDatabase();
//Cursor cursor = db.rawQuery("select * from person", null);
Cursor cursor = db.query("person", new String[]{"name", "id", "number"}, null, null, null,null, null);
List<Person> persons = new ArrayList<Person>();
while(cursor.moveToNext()){
//0
// int id = cursor.getInt(0);
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String number = cursor.getString(cursor.getColumnIndex("number"));
Person p = new Person(id, name, number);
persons.add(p);
}
cursor.close();
db.close();
return persons;
}
}
數據庫建好後,在哪裡呢,我們怎樣找到呢?
數據庫建好後,存放在Android目錄的/data/data/程序包名/databases 目錄下,我們打開後,就可以剛才建的數據庫了,把這個.db文件導出,用sqlitemanager(mac),或者sqlitexploer(windows),就可以打開這個數據庫進行查看了,
但是/data/data/程序包名/databases 這個目錄由於權限的控制,我們也只能是在模擬器中能打開,真機調試的時候,是打不開的,那我們怎麼進行使用呢,
這時我們可以使用adb指令,來使用,首先在終端中是可以打開這個目錄的,所以我們先進入這個目錄,比如我們執行
# cd /data/data/com.ftf.db/databses
# sqlite3 person.db
就會發現,不再是adb模式下的指令了,而變成sql指令的形式了,而這是和mysql一樣的,這時我們就可以相關sql語句的書寫了。