詳解Android數(shù)據(jù)存儲—使用SQLite數(shù)據(jù)庫
SQLite是Android自帶的關(guān)系型數(shù)據(jù)庫,是一個基于文件的輕量級數(shù)據(jù)庫。Android提供了3種操作數(shù)據(jù)的方式,SharedPreference(共享首選項)、文件存儲以及SQLite數(shù)據(jù)庫。
SQLite數(shù)據(jù)庫文件被保存在/data/data/package_name/databases目錄下。
一、創(chuàng)建和刪除表
1.創(chuàng)建表
創(chuàng)建表的SQL語句為:
CREATE TABLE userInfo_brief ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, password TEXT);
對應(yīng)的Java代碼為:
final static int VERSION=1; final static String TABLENAME="userInfo_brief"; final static String ID="id"; final static String NAME="name"; final static String PASSWORD="password"; String sql="CREATE TABLE "+TABLENAME+"("+"ID"+" INTEGER PRIMARY KEY AUTOINCREMENT," +NAME+" TEXT,"http:// Attention:注意SQL語法,每個變量后需要有空格,否則不認(rèn)識。 +PASSWORD+" TEXT," +AGE+" TEXT);"; db.execSQL(sql);
2.刪除表
SQL語句為:
DROP TABLE userInfo_brief;
對應(yīng)的java代碼為:
String sql="DROP TABLE "+TABLENAME+";"; db.execSQL(sql);
二、操作數(shù)據(jù)庫中的記錄
1.插入記錄
insert用法:
SQliteDatabase.insert(String table,String nullColumnHack,ContentValues values)
ContentValues values=new ContentValues();//獲取ContentValues對象,類似HashMAP values.put(DatabaseHelper.NAME, name);//鍵值對形式保存數(shù)據(jù) values.put(DatabaseHelper.PASSWORD, pass); values.put(DatabaseHelper.AGE, age); db.insert(DatabaseHelper.TABLENAME, null, values);
2.更新記錄
update使用方法:
SQliteDatabase.update(String table,ContentValues values,String where-Clause,String[] WhereArgs)
eg:更新表中name為bob的密碼
ContentValues values=new ContentValues(); values.put(PASSWORD,"123456");//要更新的數(shù)據(jù) db.update(TABLENAME,values,NAME+"=?",new String[]{"bob"});
3.刪除記錄
delete使用方法:
SQliteDatabase.delete(String table,String where-Clause,String[] WhereArgs)
eg:刪除那么為bob的記錄
db.delete(TABLENAME,NAME+"=?",new String[]{"bob"});
4.查詢記錄
1.單表查詢
使用SQLiteDatabase.query(7個參數(shù))。
2.多表查詢
如果A表中存了用戶名和密碼,B表中存了用戶名和其他具體信息,使用SQLiteQueryBuilder多表查詢。
SQL語句:
SELECT A.name,A.password,B.age,B.sex FROM A,B WHERE A.name=B.name AND A.name=“bob”
多表查詢步驟:
SQLiteQueryBuilder builder=new SQLiteQueryBuilder();//獲得對象 builder.setTables(TABLENAME_A,TABLENAME_B);//設(shè)置需要查詢的表,可多個 builder.appendWhere(TABLENAME_A+"."+NAME+"="TABLENAME_B+"."+NAME);//設(shè)置關(guān)聯(lián)屬性,表與屬性間.隔開,屬性以=連接 cursor=builder.query(7個屬性);//7屬性同單表查詢
實例—通過數(shù)據(jù)庫驗證登錄
1.數(shù)據(jù)庫設(shè)計
使用了數(shù)據(jù)庫幫助類,從寫onCreate方法
public class DatabaseHelper extends SQLiteOpenHelper { final static String DATABASENAME="my_database.db"; final static int VERSION=1; final static String TABLENAME="userInfo_detail"; final static String ID="id"; final static String NAME="name"; final static String PASSWORD="password"; final static String AGE="age"; public DatabaseHelper(Context context) { super(context, DATABASENAME, null, VERSION); // TODO 自動生成的構(gòu)造函數(shù)存根 } @Override public void onCreate(SQLiteDatabase db) { // TODO 自動生成的方法存根 String sql="CREATE TABLE "+TABLENAME+"("+"ID"+" INTEGER PRIMARY KEY AUTOINCREMENT," +NAME+" TEXT," +PASSWORD+" TEXT," +AGE+" TEXT);"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO 自動生成的方法存根 } }
2.登錄界面
public class LoginActivity extends Activity { private EditText username; private EditText password; private CheckBox autoLogin; private SharedPreferences sharedPreferences; private String message; SQLiteDatabase db; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // MyApplication.getInstance().addActivity(this); sharedPreferences = this.getSharedPreferences("userInfo",Context.MODE_WORLD_READABLE); //sharedPreferences實例化,用于記住登錄狀態(tài),判斷是否需要自動登錄 if (sharedPreferences.getBoolean("AUTO_ISCHECK", false)) { //自動登錄 Intent intent = new Intent(); intent.setClass(LoginActivity.this, MainActivity.class); intent.putExtra("NAME", sharedPreferences.getString("userName", "")); startActivity(intent); } else { setContentView(R.layout.login_main); initView(); username = (EditText) findViewById(R.id.accountEdittext); password = (EditText) findViewById(R.id.pwdEdittext); Button btn_login=(Button) findViewById(R.id.login_in); Button btn_register=(Button)findViewById(R.id.register); btn_register.setOnClickListener(new OnClickListener() {//跳轉(zhuǎn)注冊界面 @Override public void onClick(View v) { // TODO 自動生成的方法存根 Intent intent=new Intent(LoginActivity.this, RegisterActivity.class); startActivity(intent); } }); btn_login.setOnClickListener(new OnClickListener() { //判斷登錄 @Override public void onClick(View v) { // TODO Auto-generated method stub userLogin(); } }); } } /** * 初始化視圖控件 */ public void initView() { Log.i(TAG, "初始化視圖控件"); username = (EditText) findViewById(R.id.accountEdittext); password = (EditText) findViewById(R.id.pwdEdittext); autoLogin = (CheckBox) findViewById(R.id.checkBox1); // 默認(rèn)記住用戶名 username.setText(sharedPreferences.getString("userName", "")); } /** * 點擊登錄按鈕時觸發(fā)的方法 */ public void userLogin() { //通過幫助類獲得數(shù)據(jù)庫對象 DatabaseHelper helper=new DatabaseHelper(getBaseContext()); db=helper.getReadableDatabase(); //得到用戶輸入信息 String usernameString = username.getText().toString(); String passwordString = password.getText().toString(); //根據(jù)用戶名查詢數(shù)據(jù)庫信息 Cursor cursor=db.query(DatabaseHelper.TABLENAME, new String[]{DatabaseHelper.PASSWORD}, DatabaseHelper.NAME+"=?", new String[]{usernameString}, null, null, null); //若沒有查詢到相關(guān)信息,不再繼續(xù)操作 if(cursor.getCount()==0) { Toast.makeText(getBaseContext(), "用戶名不存在", Toast.LENGTH_SHORT).show(); return; } //若用戶名存在,則繼續(xù)操作 cursor.moveToFirst(); //指向第一條記錄 String password=cursor.getString(0);//取得密碼 //判斷密碼,若一樣則進(jìn)行跳轉(zhuǎn) if(password.equals(passwordString)){ if(autoLogin.isChecked()){ Editor editor=sharedPreferences.edit(); editor.putString("userNAME", usernameString); editor.putBoolean("AUTO_ISCHECK", true); editor.commit(); } Intent intent=new Intent(LoginActivity.this, MainActivity.class); intent.putExtra("NAME",usernameString); startActivity(intent); } else { // Editor editor = sharedPreferences.edit(); // editor.putString("userName", usernameString); // editor.commit(); Toast.makeText(getBaseContext(), "密碼錯誤", Toast.LENGTH_SHORT).show(); } } }
3.注冊界面
public class RegisterActivity extends Activity { String name; String pass; String age; SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { // TODO 自動生成的方法存根 super.onCreate(savedInstanceState); setContentView(R.layout.register); final EditText et_userName=(EditText)findViewById(R.id.editText_1); final EditText et_password=(EditText)findViewById(R.id.editText_2); final EditText et_age=(EditText)findViewById(R.id.editText_3); Button btn_confirm=(Button)findViewById(R.id.register_confirm); btn_confirm.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自動生成的方法存根 name=et_userName.getText().toString(); pass=et_password.getText().toString(); age=et_age.getText().toString(); //得到數(shù)據(jù)庫對象 DatabaseHelper helper=new DatabaseHelper(getBaseContext()); db=helper.getWritableDatabase(); //判斷用戶名是否已存在 Cursor cursor=db.query(DatabaseHelper.TABLENAME, new String[]{DatabaseHelper.NAME}, DatabaseHelper.NAME+"=?", new String[]{name}, null, null, null); //若查詢目標(biāo)已存在 if(cursor.getCount()>0){ Toast.makeText(getBaseContext(), "用戶名已存在", Toast.LENGTH_SHORT).show(); return; } //若不存在,則插入數(shù)據(jù) ContentValues values=new ContentValues(); values.put(DatabaseHelper.NAME, name); values.put(DatabaseHelper.PASSWORD, pass); values.put(DatabaseHelper.AGE, age); db.insert(DatabaseHelper.TABLENAME, null, values); //進(jìn)行跳轉(zhuǎn) Intent intent=new Intent(RegisterActivity.this, MainActivity.class); intent.putExtra("NAME", name); startActivity(intent); } }); } }
4.登錄成功界面
public class MainActivity extends Activity { String name; String pass; String age; private Button logout; SQLiteDatabase db; private SharedPreferences sharedPreferences; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // MyApplication.getInstance().addActivity(this); setContentView(R.layout.main_activity); logout=(Button) findViewById(R.id.logout); doQuery();//進(jìn)行查詢 doShow();//進(jìn)行顯示 logout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自動生成的方法存根 removeSharedPreference(); Intent intent=new Intent(); intent.setClass(MainActivity.this, LoginActivity.class); startActivity(intent); } }); } private void doQuery() { // TODO 自動生成的方法存根 name=getIntent().getExtras().getString("NAME"); DatabaseHelper helper=new DatabaseHelper(getBaseContext()); db=helper.getReadableDatabase(); //準(zhǔn)備查詢de屬性 String[] columns=new String[]{DatabaseHelper.PASSWORD,DatabaseHelper.AGE}; Cursor cursor=db.query(DatabaseHelper.TABLENAME, columns, DatabaseHelper.NAME+"=?", new String[]{name}, null, null, null); cursor.moveToFirst(); while(!cursor.isAfterLast()){//判斷是否是最后一條記錄 pass=cursor.getString(0); age=cursor.getString(1); cursor.moveToNext(); } } private void doShow() { // TODO 自動生成的方法存根 TextView tv_show=(TextView)findViewById(R.id.show1); tv_show.setText("用戶信息如下:\n"+"賬戶:"+name+"\n密碼"+pass+"\n年齡"+age); } public void removeSharedPreference() { sharedPreferences = getSharedPreferences("userInfo", Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit(); //editor.remove("userName"); editor.remove("AUTO_ISCHECK"); editor.commit();// 提交修改 } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android SharedPreferences數(shù)據(jù)存儲詳解
- Android數(shù)據(jù)存儲方式操作模式解析
- Android 通過SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)存儲管理
- Android四種數(shù)據(jù)存儲的應(yīng)用方式
- Android基礎(chǔ)教程數(shù)據(jù)存儲之文件存儲
- 詳解Android的網(wǎng)絡(luò)數(shù)據(jù)存儲
- Android 文件數(shù)據(jù)存儲實例詳解
- 5種Android數(shù)據(jù)存儲方式匯總
- Android數(shù)據(jù)存儲幾種方式講解
相關(guān)文章
Android中使用AsyncTask做下載進(jìn)度條實例代碼
這篇文章主要介紹了Android中使用AsyncTask做下載進(jìn)度條實例代碼的相關(guān)資料,這里附有實例代碼,具有一定參考價值,需要的朋友可以參考下2017-01-01Android 自定義通用的loadingview實現(xiàn)代碼
本篇文章主要介紹了Android 自定義通用的loadingview實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-01-01解決android有的手機拍照后上傳圖片被旋轉(zhuǎn)的問題
這篇文章主要介紹了解決android有的手機拍照后上傳圖片被旋轉(zhuǎn)的問題的相關(guān)資料,需要的朋友可以參考下2016-09-09Android RadioGroup 設(shè)置某一個選中或者不可選中的方法
下面小編就為大家?guī)硪黄狝ndroid RadioGroup 設(shè)置某一個選中或者不可選中的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04Android中WebView圖片實現(xiàn)自適應(yīng)的方法
這篇文章主要介紹了Android中WebView圖片實現(xiàn)自適應(yīng)的方法,涉及Android操作圖片顯示的相關(guān)技巧,需要的朋友可以參考下2015-05-05分享Android 藍(lán)牙4.0(ble)開發(fā)的解決方案
這篇文章主要為大家分享了Android 藍(lán)牙4.0(ble)開發(fā)的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-03-03Android GridView擴(kuò)展仿微信微博發(fā)圖動態(tài)添加刪除圖片功能
這篇文章主要為大家詳細(xì)介紹了Android GridView擴(kuò)展仿微信微博發(fā)圖動態(tài)添加刪除圖片功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05