Sqlitedatabase的初步認識與使用

android Sqlitedatabase的初步學習


首先,sqlite適合用來儲存大量數據結構相同的數據。

數據庫的創建

1.創建一個類集成SqliteOpenHelper,需要添加一個構造方法,實現兩個方法oncreate ,onupgrade構造方法中的參數介紹:

    super(Context,String name,factory,version);
    super(context, "info.db", null,1);
    //context :上下文   , name:數據庫文件的名稱    factory:用來創建cursor對象,默認爲null 
    //version:數據庫的版本號,從1開始,如果發生改變,onUpgrade方法將會調用,4.0之後只能升不能降

2 .創建這個幫助類的一個對象,調用getReadableDatabase()方法,會幫助我們創建打開一個數據庫

3.複寫oncreate和onupgrdate方法:
oncreate方法是數據庫第一次創建的時候會被調用; 特別適合做表結構的初始化,需要執行sql
語句;SQLiteDatabase db可以用來執行sql語句

4.幫助類對象中的getWritableDatabase 和 getReadableDatabase都可以幫助我們獲取一個數據庫
操作對象SqliteDatabase.
區別:
getReadableDatabase:
先嚐試以讀寫方式打開數據庫,如果磁盤空間滿了,他會重新嘗試以只讀方式打開數據庫。
getWritableDatabase:
直接以讀寫方式打開數據庫,如果磁盤空間滿了,就直接報錯。

數據庫的增刪改查

1.創建一個幫助類的對象,調用getReadableDatabase方法,返回一個SqliteDatebase對象

2.使用SqliteDatebase對象調用insert,update,delete ,query方法做增刪改查。

3.使用SqliteDatebase對象調用execSql()做增刪改,調用rawQuery方法做查詢。

一個登陸界面通過數據庫存儲賬號密碼的例子

//新建類集成SqliteOpenHelper
public class AccountSQLiteOpenHelper extends SQLiteOpenHelper {

    public AccountSQLiteOpenHelper(Context context){
        super(context, "user.db", null, 2);
        //建立名爲user.db的數據庫
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table user (_id integer primary key autoincrement,account varchar(20),password varchar(11))");
        //設置表結構
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //版本更新操作
    }
//一個幫助類對象,包含對錶的幾種操作
public class SqlDao {
    private AccountSQLiteOpenHelper mySqliteOpenHelper;
    public SqlDao(Context context){
        //創建一個幫助類對象
        mySqliteOpenHelper = new AccountSQLiteOpenHelper(context);


    }

    public boolean add(User bean){

        //執行sql語句需要sqliteDatabase對象
        //調用getReadableDatabase方法,來初始化數據庫的創建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        ContentValues values = new ContentValues();
        //是用map封裝的對象,用來存放值
        values.put("account", bean.account);
        values.put("password", bean.password);
        long result = db.insert("user", null, values);
        //底層是在拼裝sql語句
        //關閉數據庫對象
        db.close();
        if(result != -1){//-1代表添加失敗
            return true;
        }else{
            return false;
        }
    }

    public int del(String name){
        //執行sql語句需要sqliteDatabase對象
        //調用getReadableDatabase方法,來初始化數據庫的創建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        int result = db.delete("user", "account = ?", new String[]{name});
        //關閉數據庫對象
        db.close();

        return result;
    }

    public int update(User bean){

        //執行sql語句需要sqliteDatabase對象
        //調用getReadableDatabase方法,來初始化數據庫的創建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
    //是用map封裝的對象,用來存放值
        values.put("password", bean.password);

        int result = db.update("user", values, "account = ?", new String[]{bean.account});
        //關閉數據庫對象
        db.close();
        return result;
    }

    public boolean query(User bean,Context mContext){
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        Cursor cursor = db.query("user",new String[]{ "password"},"account = ?",new String[]{bean.account},null, null, "_id desc");
        if(cursor != null && cursor.getCount() > 0){
            //循環遍歷結果集,獲取每一行的內容
            String password = "";
            while(cursor.moveToNext()){//條件,遊標能否定位到下一行
                //獲取數據
                password = cursor.getString(0);
            }
            cursor.close();//關閉結果集
            if(password.equals(bean.password)) {
                Toast.makeText(mContext, "驗證成功", Toast.LENGTH_SHORT).show();
                return true;
            }else{
                Toast.makeText(mContext,"密碼錯誤", Toast.LENGTH_SHORT).show();
                return false;
            }
        }else{
            cursor.close();
            Toast.makeText(mContext,"賬號不存在!",Toast.LENGTH_SHORT).show();
            return false;
        }
        Cursor tet = mContext.getContentResolver().query()
    }
    public void query(String name){

        //執行sql語句需要sqliteDatabase對象
        //調用getReadableDatabase方法,來初始化數據庫的創建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();

        Cursor cursor = db.query("user", new String[]{"_id","account","password"}, "account = ?", new String[]{name}, null, null, "_id desc");
        //解析Cursor中的數據
        if(cursor != null && cursor.getCount() >0){//判斷cursor中是否存在數據

            //循環遍歷結果集,獲取每一行的內容
            while(cursor.moveToNext()){//條件,遊標能否定位到下一行
                //獲取數據
                int id = cursor.getInt(0);
                String name_str = cursor.getString(1);
                String password = cursor.getString(2);
                System.out.println("_id:"+id+";account:"+name_str+";password:"+password);
            }
            cursor.close();//關閉結果集

        }
        //關閉數據庫對象
        db.close();
    }
}
//MainActivity
public class MainActivity extends AppCompatActivity{
    private Context mContext;
    private EditText mAccount;  //用戶名
    private EditText mPassword; //密碼
    private Button mNewuser;    //註冊
    private Button mLogin;      //登陸



    private SQLiteDatabase mDatabase;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mContext = this;
        //創建一個幫助類對象
        mDatabase = new AccountSQLiteOpenHelper(mContext).getWritableDatabase();    //創建數據庫

        mNewuser = (Button)findViewById(R.id.newuser_button);
        mLogin = (Button)findViewById(R.id.login_button);
        mAccount = (EditText)findViewById(R.id.user_accont);
        mPassword = (EditText)findViewById(R.id.user_password);

        mNewuser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                newUser();                          //註冊判斷及數據庫操作
            }
        });

        mLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Login();                            //登陸判斷
            }
        });

    }

    private void Login(){
        String username = mAccount.getText().toString().trim();         
        //獲取賬號密碼
        String password = mPassword.getText().toString().trim();
    SqlDao sqlDao = new SqlDao(mContext);
    //新建數據庫操作對象
        User bean = new User();
        bean.account = username;
        bean.password = password;
        boolean result = sqlDao.query(bean, mContext);          
        //查詢,result接受是否有該賬戶(後續result操作未完善)

    }

    private void newUser(){
    //獲取賬號密碼
        String password = mPassword.getText().toString().trim();

        if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){     
        //判斷格式
            Toast.makeText(mContext, "用戶名及密碼不能爲空", Toast.LENGTH_SHORT).show();
            return ;
        }
        SqlDao sqlDao = new SqlDao(mContext);               
        //新建數據庫操作對象
        User bean = new User();
        bean.account = username;
        bean.password = password;
            boolean result = sqlDao.add(bean);
            if(result){
                Toast.makeText(mContext, "用戶名密碼註冊成功", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(mContext, "用戶名密碼註冊失敗", Toast.LENGTH_SHORT).show();
            }
    }
}
//存放數據類
public class User {

    public String account;

    public String password;
}

小結

小結,通過《Android編程權威指南》以及黑馬Android教學視頻學習的,這裏這是介紹了一點皮毛,自己也算是通過這次機會,把Activity的編寫邏輯理了一遍,通過這個登錄界面,以上,繼續學習。還有不知道怎麼回事今天編輯排版莫名其妙出問題=-=

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章