關於android中數據庫的創建以及基礎的增刪改查的相應操作


這里主要是掌握一些基本的相應的知識,具體的是阿金是等到明天在進行。

相應的知識點如下:

對於數據庫中的一些常識。SQLite 沒有服務器進程,它通過文件保存數據,該文件是跨平台的,可以放在其他平台中使用。並且在保存數據時,支持null(零) 、integer (整數)、real (浮點數字) 、text (字符串文本)和blob(二進制對象)5種數據類型。但實際上SQLite也接收varchar(n)、 char(n)、decimal(p,s)等數據類型,只不過在運算或保存時會轉換成對應的5種數據類型。因此,可以將各種類型的數據保存到任何字段中,而不用關心字段聲明的數據類型

SqliteOpenHelper的用法:
該類的方法:
1、getReadableDatabase() 創建或者打開一個可讀寫的數據庫,如果出現問題(磁盤滿等),則打開一個只讀的數據庫。

2、getWritableDatabase() 獲得一個可讀寫的數據庫。如果磁盤滿則會拋異常。

3、onCreate(SQLiteDatabase db) 只有第一次創建這個數據庫的時候調用。一般在這個方法中創建數據的相應表。

4、onOpen(SQLiteDatabase db) 當每次打開數據庫的時候都會調用。這個方法很少使用

5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 當升級數據庫即數據庫的版本號發生改變的時候調用,一般如果需要修改表結構就寫在這里.

//db.execSQL(“alert 表名 add 列名列數據類型”);

6、close()   關閉打開的所有數據庫對象

 

 

二、進行增加數據的相關操作是:

通過getWritableDatabase()方 法得到SQLiteDatabase對象,然后獲得ContentValues對象並將數據添加到ContentValues對象中,最后調用inser()方法將數據插入到person表中。

insert()方法接收3個參數,第一個參數是數據表的名稱,第二個參數表示如果發現將要插入的行為空行時,會將這個列名的值設為null,第三個參數為ContentValues對象。ContentValues類類似於Map類,通過鍵值對的形式存入數據,這里的key表示插入數據的列名,value 表示要插入的數據。

需要注意的是,使用完SQLiteDatabase對象后定要調用close()方法關閉,否則數據庫連接會一直存在,不斷消耗內存,當系統內存不足時將獲取不到SQLiteDatabase對象,並且會報出數據庫未關閉異常。

 

三、修改相應數據的注意事項

通過SQLiteDatebase對象db調用update()方法用來修改數據庫中的數據,update()方法接收4個參數,第一個參數表示表名,第二個參數接收一個ContentValues對象,第三個參數可選擇where語句,第四個參數表示whereClause語句中的占位參數列表,這些字符串會替換掉where條件中的 " ? "。

四、查詢數據的先關操作是

在進行數據查詢時使用的是SQLiteDatabase的query0方法,該方法返回的是一個行數集合Cursor。 Cursor 是一個游標接口,提供了遍歷查詢結果的方法,如移動指針方法move(),獲得列值方法getString()等,通過這些方法可以獲取集合中的屬性值以及序號等。

需要注意的是,在使用完Cursor對象后,一定要及時關閉,否則會造成內存泄露。下面介紹如何使用SQLiteDatabase的query()方法查詢數據,

 

這種操作方法類似於執行SQL語句 (語法和SQL server類似)。

1. 增加一條數據

?
1
db.execSQL( "insert into perosn (name, price) values(?,?)" , new String[]{name,price})

2. 修改一條數據

?
1
db.execSQL( "update person set price =? where name =?" , new String[]{price,name});

3. 刪除一條數據

?
1
db.execSQL( "delete from person where _id = ?" , new String[]{id});

4. 查詢一條數據

?
1
Cursor cursor = db.rawQuery( "select _id,name,price from person where id =?" , new String[]{id});

從上述代碼可以看出,查詢操作與增、刪、改操作有所不同,前面三個操作都是通過execSQL()方法執行SQL語句,而查詢操作使用的是rawQuery()方法。這是因為查詢數據庫會返回一個結果集Cursor,而execSQL()方法則沒有返回值。

 

 

創建數據庫的基本代碼如下:

public class SqliteHelper extends SQLiteOpenHelper{

/**
* 1.上下文
* 2.數據庫名字
* 3.工廠游標
* 4.版本號
* @param context
*/
public SqliteHelper(Context context) {
super(context, "Person.db", null, 1);
// 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 text," +
"sex text)");
}

對於數據庫方面的增刪改查的相應代碼如下:

//添加
public boolean add(String name,String age){

ContentValues values = new ContentValues();
//1.key 字段名  2.要進行添加的值
values.put("name", name);
values.put("age", age);
//1. 表名 2.要進行添加的列  3. 添加的值
long insert = sb.insert("user", null, values );
if(insert!=-1){
return true;
}else{
return false;
}

}

//查詢
public String select(){
/**
* table, 表名
* columns, 查詢列
* selection, 條件
* selectionArgs,條件的值
*  groupBy,組查詢
*  having, 子查詢
*  orderBy 順序  升序  降序
*/
Cursor query = sb.query("user", null, null, null, null, null, null);
StringBuffer stringBuffer = new StringBuffer();
while (query.moveToNext()) {

String name = query.getString(query.getColumnIndex("name"));
String age = query.getString(query.getColumnIndex("age"));
stringBuffer.append(name+"----"+age);
}
return stringBuffer.toString();
}

//刪除
public boolean delete(String name){
/**
* 1.表名
* 2.條件
* 3.條件的值
*/
int delete = sb.delete("user", "name = ?", new String[]{name});
if(delete!=-1){
return true;
}else{
return false;
}

}
//修改

public boolean update(String name,String age,String tj){

/**
* table, 表名
* values,要修改的值
*  whereClause, 條件
*  whereArgs 條件的值
*/
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
int update = sb.update("user", values, "name = ?", new String[]{tj});

if(update!=-1){
return true;
}else{
return false;
}
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM