【Android Sqlite】萌動的sqlite資料庫,簡單實現:使用者增刪改查
sqlite資料的使用很常見呢,我們簡單學習一下app的登入、註冊、修改、刪除使用者吧!
下面就寫一個萌動的app註冊登入吧!
主頁面:
還有2個圖片按鈕(雖然不是很好看,但是將就吧→。→)
EditView輸入框的監聽事件,2張圖片的切換
(為了找22,33的圖片,我反編譯了 bilibii 的app,想不到圖片是分為4張的 →。→)
使用者註冊:
修改密碼:這裡的判斷比較多!
刪除:
程式碼構成一覽:
一、entity:User 實體類
自己寫 →。→
private int id; private String uname; private String upwd; private int isDel;
二、dao包:
DBOpenHelper:建表
package example.com.user_sqlite.dao; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; /** * Created by Administrator on 2017/4/5.*/ public class DBOpenHelper extends SQLiteOpenHelper{ public DBOpenHelper(Context context, String name, CursorFactory factory,int version) { super(context, "SqliteTest.db", null, 1); } @Override public void onCreate(SQLiteDatabase sqliteDatabase) { String sql= "create table if not exists t_user("+ "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"+ "uname VARCHAR(255),"+ "upwd VARCHAR(255),"+ "isDel INTEGER DEFAULT 0"+ ")"; sqliteDatabase.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { } }
UserDao:sql語句的編寫
package example.com.user_sqlite.dao; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.lang.reflect.Array; import java.util.ArrayList; import example.com.user_sqlite.entity.User; /** * Created by Administrator on 2017/3/19. */ public class UserDao { private DBOpenHelper dbOpenHelper; //建立DBOpenHelper物件 private SQLiteDatabase sqLiteDatabase; //建立SQLiteDatabase物件 public UserDao(Context context){ //定義建構函式 dbOpenHelper=new DBOpenHelper(context,null,null,0); //初始化DBOpenHelper物件 } //插入資料 public void dbInsert(String uname,String upwd){ sqLiteDatabase =dbOpenHelper.getWritableDatabase(); String sql="insert into t_user(uname,upwd,isDel) values (?,?,0)"; Object bindArgs[] = new Object[]{ uname,upwd}; sqLiteDatabase.execSQL(sql,bindArgs); } //查詢資料 public int dbGetUserSize(){ sqLiteDatabase = dbOpenHelper.getWritableDatabase(); String sql="select count(*) from t_user where isDel=0"; Cursor cursor = sqLiteDatabase.rawQuery(sql,null); if (cursor.moveToNext()) //判斷Cursor中是否有資料 { return cursor.getInt(0); //返回總記錄數 } return 0; //如果沒有資料,則返回0 } public User dbQueryOneByUsername(String uname){ sqLiteDatabase = dbOpenHelper.getWritableDatabase(); String sql="select * from t_user where uname=? and isDel=0"; String[] selectionArgs = new String[]{ uname }; Cursor cursor = sqLiteDatabase.rawQuery(sql,selectionArgs); if (cursor.moveToNext()) //判斷Cursor中是否有資料 { User user=new User(); user.setId(cursor.getInt(cursor.getColumnIndex("id"))); user.setUname(cursor.getString(cursor.getColumnIndex("uname"))); user.setUpwd(cursor.getString(cursor.getColumnIndex("upwd"))); return user; //返回總記錄行數 } return null; } //修改密碼 public void dbUpdatePassword(String uname,String newUpwd){ sqLiteDatabase = dbOpenHelper.getWritableDatabase(); String sql="update t_user set upwd=? where uname=? and isDel=0"; Object bindArgs[] = new Object[]{ newUpwd,uname }; sqLiteDatabase.execSQL(sql,bindArgs); } //查詢新增數 public ArrayList<User> dbQueryAll(){ ArrayList<User> userArrayList = new ArrayList<User>(); sqLiteDatabase = dbOpenHelper.getWritableDatabase(); String sql="select * from t_user where isDel=0"; Cursor cursor= sqLiteDatabase.rawQuery(sql,null); for (cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){ if (cursor.getInt(cursor.getColumnIndex("isDel"))!=1){ User user=new User(); user.setId(cursor.getInt(cursor.getColumnIndex("id"))); user.setUname(cursor.getString(cursor.getColumnIndex("uname"))); user.setUpwd(cursor.getString(cursor.getColumnIndex("upwd"))); userArrayList.add(user); } } return userArrayList; } //更新資料 public void dbDeleteUser(int id){ sqLiteDatabase = dbOpenHelper.getWritableDatabase(); String sql="update t_user set isDel=1 where id=?"; Object bindArgs[] = new Object[]{ id }; sqLiteDatabase.execSQL(sql,bindArgs); } }
三、實現的方法:
1、MainActivity
package example.com.user_sqlite; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import android.app.Activity; import android.content.Intent; import example.com.user_sqlite.dao.UserDao; import example.com.user_sqlite.entity.User; public class MainActivity extends Activity { private ImageView bili1,bili2; // 使用者登入 private EditText editTextA1; private EditText editTextA2; private Button buttonA1; // 資料庫操作類 private UserDao userDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 註冊元件 userDao = new UserDao(this); editTextA1 = (EditText) findViewById(R.id.editTextA1); editTextA2 = (EditText) findViewById(R.id.editTextA2); buttonA1 = (Button) findViewById(R.id.buttonA1); bili1=(ImageView) findViewById(R.id.bili1); bili2=(ImageView) findViewById(R.id.bili2); // 使用者登入 buttonA1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String uname = editTextA1.getText() + ""; String upwd = editTextA2.getText() + ""; //一個是輸入不能為空,一個是不能只打空格null if (uname.equals(null) || uname == "" || upwd.equals(null) || upwd == "") { Toast.makeText(MainActivity.this, "使用者名稱或密碼不得為空!", Toast.LENGTH_SHORT).show(); } else { User user = userDao.dbQueryOneByUsername(uname); if (userDao.dbQueryOneByUsername(uname) == null) { Toast.makeText(MainActivity.this, "此使用者不存在!", Toast.LENGTH_SHORT).show(); } else { if (!user.getUpwd().equals(upwd)) { Toast.makeText(MainActivity.this, "密碼錯誤!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "登入成功!", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(MainActivity.this, TableActivity.class); startActivity(intent); } } } } }); //輸入框 獲取/失去 焦點切換圖片 editTextA1.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener(){ @Override public void onFocusChange(View v, boolean hasFocus) { //獲取焦點的時候,圖片一顯示,圖片二隱藏 if (hasFocus){ bili1.setVisibility(v.VISIBLE); bili2.setVisibility(v.GONE); }else { bili2.setVisibility(v.VISIBLE); bili1.setVisibility(v.GONE); } } }); } //註冊 public void Login(View view){ Intent intent = new Intent(this,LoginActivity.class); startActivity(intent); } //檢視列表資訊 public void Look(View view){ Intent intent = new Intent(this,TableActivity.class); startActivity(intent); } }
1.1:activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView 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:padding="10dp" android:background="@android:color/white" tools:context="example.com.user_sqlite.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 使用者登入: --> <ImageView android:id="@+id/bili1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bi22" android:layout_gravity="center_horizontal"/> <ImageView android:id="@+id/bili2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bi33" android:visibility="gone" android:layout_gravity="center_horizontal"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginTop="10dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/textViewA" android:textSize="24dp" android:gravity="center_horizontal" android:textColor="@android:color/holo_blue_light"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginRight="20dp" android:layout_marginTop="10dp"> <TextView android:layout_width="80dp" android:gravity="center_vertical" android:layout_height="match_parent" android:text="@string/textView1" android:textSize="18dp" android:textColor="@android:color/holo_blue_light"/> <EditText android:id="@+id/editTextA1" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="text" android:textSize="18dp" android:background="@drawable/editbg"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="10dp" android:layout_marginRight="20dp"> <TextView android:layout_width="80dp" android:gravity="center_vertical" android:layout_height="match_parent" android:text="@string/textView2" android:textSize="18dp" android:textColor="@android:color/holo_blue_light"/> <EditText android:id="@+id/editTextA2" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="textPassword" android:textSize="18dp" android:background="@drawable/editbg"/> </LinearLayout> <Button android:id="@+id/buttonA1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button1" android:textSize="18sp" android:textColor="@color/chuise2" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:background="@drawable/buttonbg"/> </LinearLayout> <!--2個圖片按鈕 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="30dp"> <ImageButton android:onClick="Login" android:layout_width="0dp" android:layout_weight="1" android:layout_height="100dp" android:scaleType="fitXY" android:src="@drawable/a2" android:background="#00000000"/> <ImageButton android:onClick="Look" android:layout_width="0dp" android:layout_weight="1" android:layout_height="100dp" android:scaleType="fitXY" android:src="@drawable/a3" android:background="#00000000" android:layout_marginLeft="30dp"/> </LinearLayout> </LinearLayout> </ScrollView>
2、LoginActivity.java
註冊方法:這裡寫了很多if else的判斷,可能有點看暈,但是修改密碼AlterActivity 更加暈呢
或許我應該有介面封裝一來,有人跟我說:寫成介面,然後用true,false這麼判斷,
可是也有人對我說:你這裡的程式碼複用性不高,寫成介面封裝會造成負擔.....
所以,我還沒有封裝呢....
package example.com.user_sqlite; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import example.com.user_sqlite.dao.UserDao; public class LoginActivity extends AppCompatActivity { // 使用者註冊 private EditText editTextB1; private EditText editTextB2; private EditText editTextB3; private Button buttonB1; // 資料庫操作類 private UserDao userDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); userDao = new UserDao(this); editTextB1 = (EditText) findViewById(R.id.editTextB1); editTextB2 = (EditText) findViewById(R.id.editTextB2); editTextB3 = (EditText) findViewById(R.id.editTextB3); buttonB1 = (Button) findViewById(R.id.buttonB1); //使用者註冊 buttonB1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String uname = editTextB1.getText() + ""; String upwd = editTextB2.getText() + ""; if (uname.equals(null) || uname == "" || upwd.equals(null) || upwd == ""){ Toast.makeText(LoginActivity.this,"使用者名稱或密碼不得為空!",Toast.LENGTH_SHORT).show(); }else { String confirmPwd = editTextB3.getText()+ ""; if (!upwd.equals(confirmPwd)){ Toast.makeText(LoginActivity.this,"兩次輸入密碼不一致",Toast.LENGTH_SHORT).show(); }else { if (userDao.dbQueryOneByUsername(uname) == null){ userDao.dbInsert(uname,upwd); Toast.makeText(LoginActivity.this,"註冊成功!使用者名稱:"+uname+ ",密碼:"+upwd+",請牢記!",Toast.LENGTH_SHORT).show(); finish(); Intent intent = new Intent(LoginActivity.this,MainActivity.class); startActivity(intent); }else { Toast.makeText(LoginActivity.this,"該使用者已被註冊", Toast.LENGTH_SHORT).show(); } } } } }); } }
2.1、activity_login:註冊頁面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:padding="10dp" tools:context="example.com.user_sqlite.LoginActivity"> <ImageView android:layout_width="100dp" android:layout_height="120dp" android:src="@drawable/a1" android:layout_gravity="center_horizontal"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/textViewB" android:textSize="24sp" android:gravity="center_horizontal" android:layout_marginTop="20dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="80dp" android:gravity="center_vertical" android:layout_height="match_parent" android:text="@string/textView1" android:textSize="18sp" /> <EditText android:id="@+id/editTextB1" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="text" android:textSize="18sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="80dp" android:gravity="center_vertical" android:layout_height="match_parent" android:text="@string/textView2" android:textSize="18sp" /> <EditText android:id="@+id/editTextB2" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="textPassword" android:textSize="18sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:gravity="center_vertical" android:layout_height="match_parent" android:text="@string/textView3" android:textSize="18sp" /> <EditText android:id="@+id/editTextB3" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="textPassword" android:textSize="18sp" /> </LinearLayout> <Button android:id="@+id/buttonB1" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="@string/button1" android:textSize="18sp" android:textColor="@color/chuise" android:layout_gravity="center_horizontal"/> </LinearLayout> </LinearLayout>
3、AlterActivity.java :修改密碼
這裡的if_else判斷更多
package example.com.user_sqlite; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import example.com.user_sqlite.dao.UserDao; import example.com.user_sqlite.entity.User; public class AlterActivity extends AppCompatActivity { // 修改密碼 private EditText editTextC1; private EditText editTextC2; private EditText editTextC3; private EditText editTextC4; private Button buttonC1; // 資料庫操作類 private UserDao userDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alter); userDao = new UserDao(this); editTextC1 = (EditText) findViewById(R.id.editTextC1); editTextC2 = (EditText) findViewById(R.id.editTextC2); editTextC3 = (EditText) findViewById(R.id.editTextC3); editTextC4 = (EditText) findViewById(R.id.editTextC4); buttonC1 = (Button) findViewById(R.id.buttonC1); //修改密碼 buttonC1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String uname=editTextC1.getText() + ""; String upwd =editTextC2.getText() + ""; if (uname.equals(null) || uname == "" || upwd.equals(null) || upwd == ""){ Toast.makeText(AlterActivity.this,"使用者名稱或密碼不得為空!",Toast.LENGTH_SHORT).show(); }else { User user = userDao.dbQueryOneByUsername(uname); if (userDao.dbQueryOneByUsername(uname) == null) { Toast.makeText(AlterActivity.this,"此使用者不存在!",Toast.LENGTH_SHORT).show(); }else { if (!user.getUpwd().equals(upwd)) { Toast.makeText(AlterActivity.this, "密碼錯誤!", Toast.LENGTH_SHORT).show(); } else { String newPwd = editTextC3.getText() + ""; String confirmNewPwd = editTextC4.getText() + ""; if (newPwd.equals(null) || newPwd == "") { Toast.makeText(AlterActivity.this, "新密碼不能為空!", Toast.LENGTH_SHORT).show(); } else { if (!newPwd.equals(confirmNewPwd)) { Toast.makeText(AlterActivity.相關推薦
【Android Sqlite】萌動的sqlite資料庫,簡單實現:使用者增刪改查
sqlite資料的使用很常見呢,我們簡單學習一下app的登入、註冊、修改、刪除使用者吧! 下面就寫一個萌動的app註冊登入吧! 主頁面: 還有2個圖片按鈕(雖然不是很好看,但是將就吧→。→) EditView輸入框的監聽事件,2張圖片的切換 (為了找22,33的圖片
利用模態框彈出,jQuery實現table的增刪改查。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script type="text/ja
【ASP.NET】GridView連線資料庫,顯示資料
前端 1、新增控制元件GridView,新增資料來源,接著按步驟選擇自己的資料庫 新增資料來源顯示資料有倆種方法: (1)一種方法是在GridView控制元件上直接按步驟新增資料來源,及設計想要顯
【知識積累】使用js-xlsx,JS實現匯入excel表格
1.匯入功能的實現1.1.引入相關的js外掛<!--js-xlsx --> <!-- <script src="http://oss.sheetjs.com/js-xlsx
【Android開發】深入理解硬碟快取類DiskLruCache:原始碼分析
1. 原理 DisKLruCache是一個用於硬碟儲存的cache的類,它不是Android API,其GitHub地址為【https://github.com/JakeWharton/DiskLruCache】,也有些部落格對其進行了介紹【Android
【機器學習】Weighted LSSVM原理與Python實現:LSSVM的稀疏化改進
【機器學習】Weighted LSSVM原理與Python實現:LSSVM的稀疏化改進 一、LSSVM 1、LSSVM用於迴歸 2、LSSVM模型的缺點 二、WLSSVM的數學原理 三、WLSSVM的python實現 參
【springboot】4、SpringBoot+Mybatis多表操作以及增刪改查
Mybatis整合成功之後,接下來了解一下增刪改查的配置以及多表操作,先從增刪改查開始 為了方便後面的多表操作,現在針對資料表的配置我這裡全部在xml中配置(暫時不用註解的方式了),先看一下目前的工程結構(注意包名) 首先為了瞭解增刪改查的操作,我這裡將針對資料庫中的一個文
【python初學】仿射加密的簡單實現
初學python,拿最近學的Affine Cipher實現個小程式……應該是各種不完善…… 求輕噴b( ̄▽ ̄)d…… def affine(a, b): try: f =
簡單的JDBC的增刪改查操作,附源碼
mysql 小白 http .exe let ext 打印 編譯 sdn 1 package com.xyyz.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager;
簡單的JDBC的增刪改查操作->抽取了基類,附源碼
exceptio tac catch main trace 工具 nload null user 1.主程序 1 package com.xyyz.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.D
通過用戶模型,對數據庫進行增刪改查操作
tab 接受 ssi fig app lte str 程序 ask 增加:db.session.add(user)db.session.commit() 查詢:User.query.filter(User.username == ‘mis1114‘).first() 修改:
通過用戶模型,對數據庫進行增刪改查操作。
lte integer fig 用戶 run __name__ bsp model table from flask import Flask from flask_sqlalchemy import SQLAlchemy import config app = Fla
搭建簡單的hibernate框架,完成對mysql的增刪改查
搭建hibernate的步驟: 1.首先下載hibernate原始碼https://nchc.dl.sourceforge.net/project/hibernate/hibernate4/4.3.11.Final/hibernate-release-4.3.11.Final.zip 2
資料庫視訊總結(二)——增刪改查
查: 簡單的SELECT語句: 例如: select student_Name,student_Sex from student_Info 1、可以當做計算機來使用: select 12*13 as 計算結果 2、讓列名發生變化: Select 原來的列名 as 新的列
純c語言實現連結串列,實現連結串列增刪改查
#include <stdio.h> #include <string.h> #include <stdlib.h> struct selflist{ int num; selflist* next; }; struct selflist* hea
使用json-server搭建虛擬後臺伺服器,並完成資料的增刪改查
在很多前後端分離的專案中,前後端同時開工,當前段專案已完成部分後,就需要獲取資料來做部分除錯,但是這個時候後臺伺服器往往還沒有完成,這個時候就需要我們自己搭建一個虛擬的後臺伺服器,無意中發現一款好用的"神器",我把自己搭建伺服器和進行一些增刪改查操作的具體步驟記錄了下來,以供大家參考; 第一步
Mybatis框架基於註解的方式,實對資料現增刪改查
編寫Mybatis程式碼,與spring不一樣,不需要匯入外掛,只需匯入架包即可; 在lib下 匯入mybatis架包:mybatis-3.1.1.jar mysql驅動架包:mysql-connector-java-5.1.6-bin.jar 在src目錄下建立xm
Hibernate 教程(三)[Hibernate物件的操作,物件CURD操作(增刪改查)]
準備 因為測試學習的時候我們每次建一個類都需要獲取Session,很麻煩。所以要把獲取Session的方法封裝成一個工具類 package uitl; import org.hibernate.Session; import org.hibernate.SessionFactory
學生管理系統,實現學生的增刪改查
先建立一個學生類: package com.inherit; public class Student { String name; String studentId; String gender; int grade;
java中ArrayList用法詳解,基本用法(含增刪改查)
1、什麼是ArrayList ArrayList就是動態陣列,它提供了①動態的增加和減少元素 ②實現了ICollection和IList介面 ③靈活的設定陣列的大小ArrayList是一個其容量能夠動態增長的動態陣列。它繼承了AbstractList,實現了List、Rand