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的編寫邏輯理了一遍,通過這個登錄界面,以上,繼續學習。還有不知道怎麼回事今天編輯排版莫名其妙出問題=-=