編輯:關於Android編程
現在就來學習一下sqlite是如何進行數據存儲並且像其他數據庫那樣實現增刪改查的
相信並不是每個人都非常的熟悉sql語句,所以android也向我們對數據庫的增刪改查提供了一系列的輔助方法,使不懂sql語句的開發者也能對sqlite進行增刪改查
現在就讓我們來創建一個數據庫,使的這個數據庫包含了一張book的表單
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
/**
* Created by blue on 2016/7/15.
*/
public class MyDataBase extends SQLiteOpenHelper {
public static final String sqlStatements = "create table book ("
+ "id integer primary key autoincrement, "
+ "author text, "
+ "price real, "
+ "pages integer, "
+ "name text)";
private Context context;
public MyDataBase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sqlStatements);
Toast.makeText(context,"數據庫創建成功",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDataBase dataBase = new MyDataBase(this,"BookManager.db",null,1);
dataBase.getWritableDatabase();
}
}
這兩段代碼就創建出了一個有book表單的數據庫了,關於這個兩段代碼請 點擊進入詳解參考我寫的這篇博客
好了現在數據庫和表單已經創建出來了,現在就讓我們開始想表單中添加數據了
在我們向表中添加數據之前我們需要了解SQLiteOpenHelper的 getReadableDatabase()或 getWritableDatabase()這兩個方法,就像人如其名這個成語一樣,看這兩個方法名字,我們就已經能猜出他們的大概作用的了,沒錯就是這兩個方法這兩個方法都會返回一個SQLiteDatabase對象,借助這個對象就可以對數據進行 增刪改查 操作了
並且我們還得了解一下SQLiteDatabase為我們提供的insert方法,由名字可以知道,這個方法是用來添加數據的,這個方法他接收三個參數,第一個就是我們表單的名字,第二個就是用於在未指定添加數據情況下給某些可為空的列自動賦值 NULL, 一般我們用不到這個功能, 直接傳入 null 即可,然後第三個數據就是一個ContentValues對象了,ContentValues是一種存儲機制,他只能存儲基本類型的數據,像string,int之類的,不能存儲對象這種東西,並且像裡面存儲的是鍵值對,現在我們就來編寫代碼:
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btn_add;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_add = (Button) findViewById(R.id.btn_start);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDataBase dataBase = new MyDataBase(MainActivity.this,"BookManager.db",null,1);
ContentValues values = new ContentValues();
values.put("name","The Firs Line Code");
values.put("author","guolindashen");
values.put("price",21.22);
values.put("pages",666);
SQLiteDatabase db = dataBase.getWritableDatabase();
db.insert("book",null,values);
Toast.makeText(MainActivity.this,"數據添加成功",Toast.LENGTH_SHORT).show();
}
});
}
}
上面的這段代碼 我們創建了一個ContentValues的對象 並且向這個對象中添加四組與表單中字段相匹配的鍵值對,然後我們調用SQLiteDatabase的insert函數把這個contenvalue傳遞進去,並且解析到了,數據庫表中的四個字段,由於id我們設置的是自增長所以就不需要傳入了
好了現在我們可以通過adb shell來進行查看一下我們數據是否真的添加去了,由於博主用的是小米真機進行調試 adb sehll 的sqlite命令無法使用 所以使用sqlite editor 的應用來查看我們的數據庫
由於我多啟動了幾次 所以結果就像這樣了,但數據我們確實是存進去了
好了現在數據庫的增加數據已經 完成了 我們來完成數據庫表單中字段的刪除
首先我們要了SQLiteDatabase 中提供了一個 delete()方法專門用於刪除數據,這個方法接收三個參數,第一個參數仍然是表名,這個已經沒什麼好說的了,第二、第三個參數又是用於去約束刪除某一行或某幾行的數據,不指定的話默認就是刪除所有行。
現在讓我們來編寫代碼
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btn_add;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_add = (Button) findViewById(R.id.btn_start);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDataBase dataBase = new MyDataBase(MainActivity.this,"BookManager.db",null,1);
SQLiteDatabase db = dataBase.getWritableDatabase();
db.delete("Book", "pages > ?", new String[] { "500" });
}
});
}
}
從上面可以看出,我們調用delet方法 ,刪除那些頁數超過 500 頁的書籍
現在讓我們啟動程序,可以看出 我們把所有的書都刪除了,因為我們所添加的書籍的頁面都是大於500的
好了刪除已經完成,接下來就是修改了,由於剛才刪除已經把表單的書籍全都刪除完了,我們重新運行一下增加的程序,然後我們將對這本書進行修改
修改又叫更新,SQLiteDatabase 中也是提供了一個非常好用的 update()方法用於對數據進行更新,這個方法接收四個參數,第一個參數和 insert()方法一樣,也是表名第二個參數是 ContentValues 對象,要把更新數據在這裡組裝進去。第三、第四個參數用於去約束更新某一行或某幾行中的數據,不指定的話默認就是更新所有行。
現在讓我們來寫代碼
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btn_add;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_add = (Button) findViewById(R.id.btn_start);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDataBase dataBase = new MyDataBase(MainActivity.this,"BookManager.db",null,1);
SQLiteDatabase db = dataBase.getWritableDatabase();
dataBase.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price", 10.99);
db.update("Book", values, "name = ?", new String[] { "The First Line Code" });
Toast.makeText(MainActivity.this,"數據更新成功",Toast.LENGTH_SHORT).show();
}
});
}
}
可以看到我們把21.22 改成了 10.99
增刪改已經完成了,現在我們來完成最後的 查詢
在寫查詢語句的時候我們按照慣例還是要了解一下,,SQLiteDatabase中還提供了一個query()方法用於對數據進行查詢。這個方法的參數非常復雜,最短的一個方法重載也需要傳入七個參數。那我們就先來看一下這七個參數各自的含義吧,第一個參數不用說,當然還是表名,表示我們希望從哪張表中查詢數據。第二個參數用於指定去查詢哪幾列,如果不指定則默認查詢所有列。第三、第四個參數用於去約束查詢某一行或某幾行的數據,不指定則默認是查詢所有行的數據。第五個參數用於指定需要去 group by 的列,不指定則表示不對查詢結果進行 group by 操作。第六個參數用於對 group by 之後的數據進行進一步的過濾,不指定則表示不進行過濾。第七個參數用於指定查詢結果的排序方式,不指定則表示使用默認的排序方式。
當我們調用由於query方法時會返回一個Curso對象,query方法實在是太麻煩了 在這裡我們只寫一個簡單查詢表中所有數據的語句
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btn_add;
private TextView text_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_add = (Button) findViewById(R.id.btn_start);
text_data = (TextView) findViewById(R.id.text_data);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDataBase dataBase = new MyDataBase(MainActivity.this,"BookManager.db",null,1);
SQLiteDatabase db = dataBase.getWritableDatabase();
Cursor cursor = db.query("Book", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
do {
// 遍歷Cursor 對象,取出數據並打印
String name = cursor.getString(cursor.
getColumnIndex("name"));
String author = cursor.getString(cursor.
getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex
("pages"));
double price = cursor.getDouble(cursor.
getColumnIndex("price"));
text_data.setText(name+"\n"+author+"\n"+pages+"\n"+price);
} while (cursor.moveToNext());
}
cursor.close();
}
});
}
}
從上面代碼我們可以看出使用了第一個參數指明去查詢 Book 表,後面的參數全部為 null。這就表示希望查詢這張表中的所有數據,雖然這張表中目前只剩下一條數據了。 查詢完之後就得到了一個 Cursor 對象, 接著我們調用它的 moveToFirst()方法將數據的指針移動到第一行的位置,然後進入了一個循環當中,去遍歷查詢到的每一行數據。在這個循環中可以通過 Cursor 的 getColumnIndex()方法獲取到某一列在表中對應的位置索引,然後將這個索引傳入到相應的取值方法中,就可以得到從數據庫中讀取到的數據了,然後我們將取出來的數據放在了TextView中
到現在為止我們已經學會了基本增刪改查了
參考資料 第一行代碼
Contact providerContact provider是一個強大而又靈活的 Android 組件,用於管理設備上有關聯系人數據的中央存儲庫。 Contact p
Google提供了一個官方的下拉刷新控件SwipeRefreshLayout,個人感覺還不錯!見慣了傳統的下拉刷新,這個反而給人耳目一新的感覺(Gmail郵箱已經
本文實例講述了Android編程ProgressBar自定義樣式之動畫模式實現方法。分享給大家供大家參考,具體如下:忘記在哪裡看到的那位仁兄寫的,就是通過用動畫效果來實現
中文名:坐標矩陣高等數學裡有介紹,在圖像處理方面,主要是用於平面的縮放、平移、旋轉等操作。在Android裡面,Matrix由9個float值構成,是一個3*3的矩陣。最