編輯:關於Android編程
前面的博客中已經講過了asper_success/article/details/52670100">sharedpreferences的用法,大家也都看到了,sharedpreferences使用簡單,但同時也有局限性,因為它是xml存儲形式的,所以在排序、篩選等方面略顯不足。
提到排序、篩選、比較等需求,我們自然而然會想到數據庫,這也正是android自帶數據庫——SQLite的來由。
新建一個類(類名自定義)繼承SQLiteOpenHelper,並實現構造方法、重寫oncreate和onupgrade方法。
public class DBHelper extends SQLiteOpenHelper {
private String createSQL = "create table student("
+ "id integer primary key autoincrement not null ,"
+ "name varchar(20) not null,"
+ "age integer not null ,"
+ "gender varchar(2) not null)";
/**
*
* @param context
* @param name 數據庫名字
* @param factory 數據庫進行查詢的時候會返回一個cursor,這個cursor就是在上面的factory中產生的。
如果有需求,可以自定義factory,這樣返回的cursor就會符合自己的需求!
* @param version 數據庫版本號
*/
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(createSQL);
}
/**
* 該方法會在數據庫需要升級的時候調用
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
}
}
這裡有兩種創建方式,分別是:
1、只讀模式
SQLiteDatabase sqldb = dbhelper.getReadableDatabase();
2、讀寫模式
SQLiteDatabase sqldb = dbhelper.getWritableDatabase();
1、增
private void insert() {
String name = nameEdit.getText().toString();
//獲得SQLiteDatabase對象,讀寫模式
sqldb = dbhelper.getWritableDatabase();
//ContentValues類似HashMap,區別是ContentValues只能存簡單數據類型,不能存對象
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", 20);
values.put("gender", "男");
//執行插入操作
sqldb.insert(TABLE_NAME, null, values);
}
2、刪
private void delete() {
sqldb = dbhelper.getWritableDatabase();
//第二個參數是WHERE語句(即執行條件,刪除哪條數據)
//第三個參數是WHERE語句中占位符(即"?"號)的填充值
sqldb.delete(TABLE_NAME, "name=?", new String[]{"jack"});//刪除name的值是jack的那條記錄
}
3、改
private void modify() {
SQLiteDatabase sqldb = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "Jet");
//第二個參數是修改的字段及修改的值(已經存放到ContentValues中)
//第三個參數是WHERE語句
//第四個參數是WHERE語句中占位符的填充值
//如果第三四個參數為null,那就將每條記錄都改掉
sqldb.update(TABLE_NAME, values, null, null);
}
4、查
private void show() {
//得到數據庫對象
sqldb = dbhelper.getReadableDatabase();
//創建游標
Cursor mCursor = sqldb.query(TABLE_NAME, new String[] { "id", "name", "age", "gender" }, "age>?", new String[]{"10"}, null, null,
null);
//游標置頂
mCursor.moveToFirst();
//遍歷
do{
String name = mCursor.getString(mCursor.getColumnIndex("name"));
System.out.println(name);
}while(mCursor.moveToNext());
}
DBHelper類代碼
public class DBHelper extends SQLiteOpenHelper {
private String createSQL = "create table student("
+ "id integer primary key autoincrement not null ,"
+ "name varchar(20) not null,"
+ "age integer not null ,"
+ "gender varchar(2) not null)";
/**
*
* @param context
* @param name 數據庫名字
* @param factory 數據庫進行查詢的時候會返回一個cursor,這個cursor就是在上面的factory中產生的。
如果有需求,可以自定義factory,這樣返回的cursor就會符合自己的需求!
* @param version 數據庫版本號
*/
public DBHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(createSQL);
}
/**
* 該方法會在數據庫需要升級的時候調用
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
}
}
MainActivity類代碼
public class MainActivity extends Activity implements OnClickListener {
private Button addBtn;
private Button deleteBtn;
private Button modifyBtn;
private Button showBtn;
private EditText nameEdit;
private DBHelper dbhelper;
private SQLiteDatabase sqldb;
private static final String TABLE_NAME = "student";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindID();
dbhelper = new DBHelper(this, "demodb", null, 1);
}
/**
* 綁定ID和監聽事件
*/
private void bindID() {
addBtn = (Button) findViewById(R.id.addBtn);
deleteBtn = (Button) findViewById(R.id.deleteBtn);
modifyBtn = (Button) findViewById(R.id.modifyBtn);
showBtn = (Button) findViewById(R.id.showBtn);
nameEdit = (EditText) findViewById(R.id.nameEdit);
addBtn.setOnClickListener(this);
deleteBtn.setOnClickListener(this);
modifyBtn.setOnClickListener(this);
showBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.addBtn:
insert();
break;
case R.id.deleteBtn:
delete();
break;
case R.id.modifyBtn:
modify();
break;
case R.id.showBtn:
show();
break;
default:
break;
}
}
private void insert() {
String name = nameEdit.getText().toString();
//獲得SQLiteDatabase對象,讀寫模式
sqldb = dbhelper.getWritableDatabase();
//ContentValues類似HashMap,區別是ContentValues只能存簡單數據類型,不能存對象
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", 20);
values.put("gender", "男");
//執行插入操作
sqldb.insert(TABLE_NAME, null, values);
}
private void delete() {
sqldb = dbhelper.getWritableDatabase();
//第二個參數是WHERE語句(即執行條件,刪除哪條數據)
//第三個參數是WHERE語句中占位符(即"?"號)的填充值
sqldb.delete(TABLE_NAME, "name=?", new String[]{"jack"});
}
private void modify() {
SQLiteDatabase sqldb = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "Jet");
//第二個參數是修改的字段及修改的值(已經存放到ContentValues中)
//第三個參數是WHERE語句
//第四個參數是WHERE語句中占位符的填充值
//如果第三四個參數為null,那就將每條記錄都改掉
sqldb.update(TABLE_NAME, values, null, null);
}
private void show() {
//得到數據庫對象
sqldb = dbhelper.getReadableDatabase();
//創建游標
Cursor mCursor = sqldb.query(TABLE_NAME, new String[] { "id", "name", "age", "gender" }, "age>?", new String[]{"10"}, null, null,
null);
//游標置頂
mCursor.moveToFirst();
//遍歷
do{
String name = mCursor.getString(mCursor.getColumnIndex("name"));
System.out.println(name);
}while(mCursor.moveToNext());
}
@Override
protected void onDestroy() {
super.onDestroy();
//退出程序後,關閉數據庫資源
sqldb.close();
}
}
布局文件代碼
Android 高仿華為手機Tab頁滑動導航效果
首先帶大家看一下實現效果,用了兩種實現方式:1.基於LinearLayout實現,導航欄不可響應手指滑動2.基於HorizontalScrollView實現,導航欄可響應
Android自定義view進階-- 神奇的貝塞爾曲線
今天給大家介紹一個非常神奇的曲線,貝塞爾曲線。相信大家之前都有耳聞。很久之前就久聞該線大名,但是一直不是很了解,在經過一番谷歌之後,有了初步的概念:三點確定一條曲線:起點
【Android UI】ListView的使用和簡單優化
ListView是每個app中都要使用的,所以今天我來總結下ListView的使用和一些簡單的優化。先看下運行效果:一、創建數據庫為了模擬數據,這裡將數據保存數據庫中,順
Activity的聲明周期和啟動模式
正常情況下Activity的聲明周期先來看看官方給出的聲明周期圖:這裡需要說明如下幾點:針對特定Activity,第一次啟動,回調如下:onCreate->onSt