詳解Android數(shù)據(jù)存儲(chǔ)—使用SQLite數(shù)據(jù)庫(kù)

SQLite是Android自帶的關(guān)系型數(shù)據(jù)庫(kù),是一個(gè)基于文件的輕量級(jí)數(shù)據(jù)庫(kù)。Android提供了3種操作數(shù)據(jù)的方式,SharedPreference(共享首選項(xiàng))、文件存儲(chǔ)以及SQLite數(shù)據(jù)庫(kù)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、天臺(tái)網(wǎng)站維護(hù)、網(wǎng)站推廣。

SQLite數(shù)據(jù)庫(kù)文件被保存在/data/data/package_name/databases目錄下。

一、創(chuàng)建和刪除表

1.創(chuàng)建表

創(chuàng)建表的SQL語(yǔ)句為:

CREATE TABLE userInfo_brief (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
password TEXT);

對(duì)應(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語(yǔ)法,每個(gè)變量后需要有空格,否則不認(rèn)識(shí)。
    +PASSWORD+" TEXT,"
    +AGE+" TEXT);";
    db.execSQL(sql);

2.刪除表

SQL語(yǔ)句為:

DROP TABLE userInfo_brief;

對(duì)應(yīng)的java代碼為:

String sql="DROP TABLE "+TABLENAME+";";
db.execSQL(sql);

二、操作數(shù)據(jù)庫(kù)中的記錄

1.插入記錄

insert用法:

SQliteDatabase.insert(String table,String nullColumnHack,ContentValues values)
ContentValues values=new ContentValues();//獲取ContentValues對(duì)象,類似HashMAP
      values.put(DatabaseHelper.NAME, name);//鍵值對(duì)形式保存數(shù)據(jù)
      values.put(DatabaseHelper.PASSWORD, pass);
      values.put(DatabaseHelper.AGE, age);
      db.insert(DatabaseHelper.TABLENAME, null, values);

2.更新記錄

update使用方法:

復(fù)制代碼 代碼如下:

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個(gè)參數(shù))。

2.多表查詢

如果A表中存了用戶名和密碼,B表中存了用戶名和其他具體信息,使用SQLiteQueryBuilder多表查詢。
SQL語(yǔ)句:

復(fù)制代碼 代碼如下:

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();//獲得對(duì)象
builder.setTables(TABLENAME_A,TABLENAME_B);//設(shè)置需要查詢的表,可多個(gè)
builder.appendWhere(TABLENAME_A+"."+NAME+"="TABLENAME_B+"."+NAME);//設(shè)置關(guān)聯(lián)屬性,表與屬性間.隔開,屬性以=連接
cursor=builder.query(7個(gè)屬性);//7屬性同單表查詢

實(shí)例—通過(guò)數(shù)據(jù)庫(kù)驗(yàn)證登錄

1.數(shù)據(jù)庫(kù)設(shè)計(jì)

使用了數(shù)據(jù)庫(kù)幫助類,從寫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 自動(dòng)生成的構(gòu)造函數(shù)存根
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
    // TODO 自動(dòng)生成的方法存根
    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 自動(dòng)生成的方法存根

  }

}

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實(shí)例化,用于記住登錄狀態(tài),判斷是否需要自動(dòng)登錄

    if (sharedPreferences.getBoolean("AUTO_ISCHECK", false)) { //自動(dòng)登錄

      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)注冊(cè)界面

      @Override
      public void onClick(View v) {
        // TODO 自動(dòng)生成的方法存根
        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", "")); 

  } 

  /** 
   * 點(diǎn)擊登錄按鈕時(shí)觸發(fā)的方法 
   */ 
  public void userLogin() { 
    //通過(guò)幫助類獲得數(shù)據(jù)庫(kù)對(duì)象
    DatabaseHelper helper=new DatabaseHelper(getBaseContext());
    db=helper.getReadableDatabase();
    //得到用戶輸入信息
    String usernameString = username.getText().toString(); 
    String passwordString = password.getText().toString(); 
    //根據(jù)用戶名查詢數(shù)據(jù)庫(kù)信息
    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(), "密碼錯(cuò)誤", Toast.LENGTH_SHORT).show();
    }

  }
 }

詳解Android數(shù)據(jù)存儲(chǔ)—使用SQLite數(shù)據(jù)庫(kù)

3.注冊(cè)界面

public class RegisterActivity extends Activity {
  String name;
  String pass;
  String age;
  SQLiteDatabase db;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO 自動(dòng)生成的方法存根
    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 自動(dòng)生成的方法存根
        name=et_userName.getText().toString();
        pass=et_password.getText().toString();
        age=et_age.getText().toString();
        //得到數(shù)據(jù)庫(kù)對(duì)象

        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);
      }
    });
  }
}

詳解Android數(shù)據(jù)存儲(chǔ)—使用SQLite數(shù)據(jù)庫(kù) 

詳解Android數(shù)據(jù)存儲(chǔ)—使用SQLite數(shù)據(jù)庫(kù)

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 自動(dòng)生成的方法存根
        removeSharedPreference();
       Intent intent=new Intent();
       intent.setClass(MainActivity.this, LoginActivity.class);
       startActivity(intent);
      }
    });
  }

  private void doQuery() {
    // TODO 自動(dòng)生成的方法存根
    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 自動(dòng)生成的方法存根
    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();// 提交修改
    }
}

詳解Android數(shù)據(jù)存儲(chǔ)—使用SQLite數(shù)據(jù)庫(kù)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

新聞標(biāo)題:詳解Android數(shù)據(jù)存儲(chǔ)—使用SQLite數(shù)據(jù)庫(kù)
當(dāng)前網(wǎng)址:http://muchs.cn/article46/pdjoeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站策劃、微信公眾號(hào)網(wǎng)站導(dǎo)航、網(wǎng)頁(yè)設(shè)計(jì)公司、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司