編輯:關於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(); } }
布局文件代碼
首先帶大家看一下實現效果,用了兩種實現方式:1.基於LinearLayout實現,導航欄不可響應手指滑動2.基於HorizontalScrollView實現,導航欄可響應
今天給大家介紹一個非常神奇的曲線,貝塞爾曲線。相信大家之前都有耳聞。很久之前就久聞該線大名,但是一直不是很了解,在經過一番谷歌之後,有了初步的概念:三點確定一條曲線:起點
ListView是每個app中都要使用的,所以今天我來總結下ListView的使用和一些簡單的優化。先看下運行效果:一、創建數據庫為了模擬數據,這裡將數據保存數據庫中,順
正常情況下Activity的聲明周期先來看看官方給出的聲明周期圖:這裡需要說明如下幾點:針對特定Activity,第一次啟動,回調如下:onCreate->onSt