Android數(shù)據(jù)庫增刪改查實戰(zhàn)案例
一、案例演示
二、實現(xiàn)步驟
1、activity_main.xml
頁面布局
代碼
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:id="@+id/tv_username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:layout_marginTop="10dp" android:text="用戶名:"/> <EditText android:id="@+id/et_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_toRightOf="@id/tv_username" android:minLines="2" /> <EditText android:id="@+id/et_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/et_username" android:layout_alignLeft="@id/et_username" android:layout_marginTop="10dp" android:inputType="textPassword" android:minLines="2" android:textSize="30sp" /> <TextView android:id="@+id/tv_choiceB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/et_password" android:textSize="30sp" android:text="密 碼:"/> <EditText android:id="@+id/et_age" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/et_password" android:layout_alignLeft="@id/et_password" android:layout_marginTop="10dp" android:minLines="2" /> <TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/et_age" android:textSize="30sp" android:text="年 齡:"/> <Button android:id="@+id/bt_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_age" android:layout_alignTop="@id/bt_query" android:text="保存" android:textSize="25sp" /> <Button android:id="@+id/bt_update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改" android:layout_toRightOf="@id/bt_query" android:layout_below="@id/et_age" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:textSize="25sp" /> <Button android:id="@+id/bt_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="刪除" android:layout_toRightOf="@id/bt_update" android:layout_below="@id/et_age" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:textSize="25sp" /> <Button android:id="@+id/bt_query" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/et_age" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:layout_toRightOf="@id/bt_save" android:text="查詢" android:textSize="25sp" /> <TextView android:id="@+id/tv_show" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/bt_save" android:textSize="25dp" /> </RelativeLayout>
2、MainActivity.java
通過點擊不同的按鈕,進行不同的增刪改查操作
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private SQLiteOpenHelper helper; private UserDao userDao; private User user; private EditText et_username,et_password,et_age; private Button bt_save,bt_query,bt_update,bt_delete; private TextView tv_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 init(); userDao=new UserDao(this); } public void init(){ et_username = findViewById(R.id.et_username); et_password = findViewById(R.id.et_password); et_age = findViewById(R.id.et_age); bt_save = findViewById(R.id.bt_save); bt_query = findViewById(R.id.bt_query); bt_update = findViewById(R.id.bt_update); bt_delete = findViewById(R.id.bt_delete); tv_show = findViewById(R.id.tv_show); bt_save.setOnClickListener(this); bt_query.setOnClickListener(this); bt_update.setOnClickListener(this); bt_delete.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.bt_save:{ user=new User(et_username.getText().toString(),et_password.getText().toString(),Integer.parseInt((et_age.getText().toString()))); long i=userDao.addUser(user); if(i!=-1){ Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(this, "添加失敗", Toast.LENGTH_SHORT).show(); } break; } case R.id.bt_delete:{ int i= userDao.deleteUser(et_username.getText().toString()); if(i!=0){ Toast.makeText(this, "刪除成功", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(this, "刪除失敗", Toast.LENGTH_SHORT).show(); } break; } case R.id.bt_update:{ user=new User(et_username.getText().toString(),et_password.getText().toString(),Integer.parseInt((et_age.getText().toString()))); int i= userDao.updateUser(user); if(i!=0){ Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(this, "修改失敗", Toast.LENGTH_SHORT).show(); } break; } case R.id.bt_query:{ //為了解決查詢重復問題,需要先創(chuàng)建一個StringBuffer或者String類型對象,用于存儲數(shù)據(jù),存儲后在給控件賦值就可以解決 ArrayList list=userDao.queryAll(); StringBuffer buffer=new StringBuffer(); if(list.size()==0){ tv_show.setText("沒有數(shù)據(jù)"); }else { for (int i=0;i<list.size();i++){ User user= (User) list.get(i); buffer.append("id:" +user.getId()+ "用戶名:"+user.getUsername()+ "密碼:"+user.getPassword()+ "年齡:"+user.getAge()+"\n"); } tv_show.setText(buffer); } break; } } } }
3、UserDao.java
包含對數(shù)據(jù)庫的增刪改查方法
public class UserDao { private SQLiteOpenHelper helper; public UserDao(Context context){ helper=new SQLiteOpenHelper(context,"user1",null,1); } //添加數(shù)據(jù) public long addUser(User user){ //1.獲取數(shù)據(jù)庫對象 SQLiteDatabase database=helper.getWritableDatabase(); //那些列為空,可以設置為空 ContentValues values=new ContentValues(); //key是數(shù)據(jù)表的列名,value是要放進去的值 values.put("username",user.getUsername()); values.put("password",user.getPassword()); values.put("age",user.getAge()); //第一個參數(shù)表明,第二個參數(shù)自動賦值為null的列名,第三個參數(shù)數(shù)據(jù) //返回值long,插入成功行號,插入失敗-1 long i=database.insert("users",null,values); //關閉數(shù)據(jù)庫 database.close(); return i; } //刪除 public int deleteUser(String username){ //1.獲取數(shù)據(jù)庫對象 SQLiteDatabase database=helper.getWritableDatabase(); //第一個參數(shù)表明,第二個參數(shù)為刪除條件,第三個參數(shù)為第二個參數(shù)中占位符所需值組成的字符串數(shù)組 int i=database.delete("users","username=?",new String[]{username+""}); //關閉數(shù)據(jù)庫 database.close(); return i; } //修改 public int updateUser(User user){ //1.獲取數(shù)據(jù)庫對象 SQLiteDatabase database=helper.getWritableDatabase(); //那些列為空,可以設置為空 ContentValues values=new ContentValues(); //key是數(shù)據(jù)表的列名,value是要放進去的值 values.put("username",user.getUsername()); values.put("password",user.getPassword()); values.put("age",user.getAge()); //第一個參數(shù)表明,第二個參數(shù)新數(shù)據(jù),第三個參數(shù)是條件 int i=database.update("users",values,"username=?",new String[]{user.getUsername()}); //關閉數(shù)據(jù)庫 database.close(); return i; } //查詢 public ArrayList queryAll(){ ArrayList list=new ArrayList(); SQLiteDatabase database=helper.getWritableDatabase(); Cursor cursor=database.query("users",null,null,null,null,null,null); list=convertFromCursor(cursor); return list; } //通過對Cursor對象遍歷查詢結果,并將其范圍為一個list集合 private ArrayList convertFromCursor(Cursor cursor){ ArrayList list=new ArrayList(); if(cursor!=null&&cursor.moveToFirst()){ //通過游標遍歷這個集合 do{ int id=cursor.getInt(cursor.getColumnIndex("id")); String username=cursor.getString(cursor.getColumnIndex("username")); String password=cursor.getString(cursor.getColumnIndex("password")); int age=cursor.getInt(cursor.getColumnIndex("age")); User user=new User(id,username,password,age); list.add(user); }while (cursor.moveToNext()); } return list; } }
4、User.java
實體類對應著user表中的字段
public class User { private int id; private String username; private String password; private int age; public User(int id, String username, String password, int age) { this.id = id; this.username = username; this.password = password; this.age = age; } public User(String username, String password, int age) { this.username = username; this.password = password; this.age = age; } public User(){}; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
5、SQLiteOpenHelper.java
創(chuàng)建表,更新表方法
public class SQLiteOpenHelper extends android.database.sqlite.SQLiteOpenHelper { private Context context; public static final String CREATE_TABLES="create table users ("+ "id integer primary key autoincrement,"+ "username text,"+ "password text,"+ "age integer)"; public static final String CREATE_DEPARTMENT="create table department ("+ "id integer primary key autoincrement,"+ "departmentName text,"+ "departCode text)"; public SQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); this.context=context; } //創(chuàng)建數(shù)據(jù)表(只有在第一次創(chuàng)建數(shù)據(jù)庫的時候才會被調(diào)用) @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(CREATE_TABLES); Toast.makeText(context, "success databases", Toast.LENGTH_SHORT).show(); } //數(shù)據(jù)庫的更新(第一個參數(shù)數(shù)據(jù)庫對象,第二個參數(shù)舊版本號,第三個參數(shù)新版本號) //新版本號大于舊版本號就會調(diào)用onUpgrade方法 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { /** * //如果數(shù)據(jù)表存在就刪除 * sqLiteDatabase.execSQL("drop table if exists users"); * sqLiteDatabase.execSQL("drop table if exists department"); * onCreate(sqLiteDatabase); */ switch (i){ case 1:sqLiteDatabase.execSQL(CREATE_DEPARTMENT); } } }
總結
到此這篇關于Android數(shù)據(jù)庫增刪改查的文章就介紹到這了,更多相關Android數(shù)據(jù)庫增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android 通過Base64上傳圖片到服務器實現(xiàn)實例
這篇文章主要介紹了Android 通過Base64上傳圖片到服務器實現(xiàn)實例的相關資料,需要的朋友可以參考下2017-05-05Android中通過RxJava進行響應式程序設計的入門指南
響應式編程在Android中的運用是非常犀利的,比如在異常處理和調(diào)度器方面,這里我們將從生命周期等方面來講解Android中通過RxJava進行響應式程序設計的入門指南:2016-06-06Android 使用Vitamio打造自己的萬能播放器(3)——本地播放(主界面、播放列表)
本文主要介紹 Android Vitamio本地播放功能,這里提供實例代碼和效果圖以便大家參考,有需要的小伙伴可以參考下2016-07-07Android開發(fā)Intent跳轉(zhuǎn)傳遞list集合實現(xiàn)示例
這篇文章主要為大家介紹了Android開發(fā)Intent跳轉(zhuǎn)傳遞list集合實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07