Android開發 ---ORMLite實現數據的增刪改查

来源:https://www.cnblogs.com/zn615/archive/2018/01/09/8253183.html
-Advertisement-
Play Games

效果圖: 項目目錄截圖: 1、activity_main.xml 描述: 兩行顯示8個按鈕 2、MainActivity.java 3、dao/DeptDao.java 4、dao/EmpDao.java 5、dao/UsersDao.java 6、entity/TbDept.java 7、enti ...


效果圖:

 

項目目錄截圖:

1、activity_main.xml

  描述:

    兩行顯示8個按鈕

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:text="添加用戶"
            android:onClick="addUser"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
        <Button
            android:text="查詢用戶"
            android:onClick="findUserList"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
        <Button
            android:text="刪除用戶"
            android:onClick="deleteUser"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
        <Button
            android:text="修改用戶"
            android:onClick="updateUser"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:text="添加部門"
            android:onClick="addDept"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
        <Button
            android:text="查詢部門"
            android:onClick="findDeptList"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
        <Button
            android:text="添加員工"
            android:onClick="addEmp"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
        <Button
            android:text="查詢員工"
            android:onClick="findEmpList"
            android:layout_width="match_parent"
            android:layout_weight="1"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

2、MainActivity.java

package com.nf.android_ormlite;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.nf.dao.DeptDao;
import com.nf.dao.EmpDao;
import com.nf.dao.UsersDao;
import com.nf.entity.TbDept;
import com.nf.entity.TbEmp;
import com.nf.entity.Users;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //添加用戶操作
    //new一個Users將用戶的編號、用戶名、密碼、日期封裝起來交給UsersDao里的addUsers()方法進行添加用戶的操作
    //添加成功返回結果並彈出提示
    public void addUser(View view) throws SQLException {
        boolean res=new UsersDao(this).addUsers(new Users(0,"abc","123123",new Date()));
        Toast.makeText(this, "添加用戶結果是:"+res, Toast.LENGTH_SHORT).show();
    }
    //查詢用戶信息列表的操作
    //調用UsersDao里的getUserList()方法從資料庫中獲取到所有用戶的信息,保存到list集合中
    public void findUserList(View view) throws SQLException {
        List<Users> users=new UsersDao(this).getUserList();
        //對list集合進行迴圈遍歷,取出用戶編號、用戶名稱、用戶密碼寫入日誌中
        for (Users user:users){
            Log.i("FindUserList:",user.get_id()+","+user.getUname()+","+user.getUpwd());
        }
    }
    //根據用戶ID刪除用戶信息的操作
    //調用UserDao中的deleteUsers()方法傳入一個用戶ID,刪除該ID對應的用戶信息
    public void deleteUser(View view) throws SQLException {
        UsersDao dao=new UsersDao(this);
        Users user=dao.getUserById(3);
        boolean res=new UsersDao(this).deleteUsers(user);
        Toast.makeText(this, "刪除用戶結果是:"+res, Toast.LENGTH_SHORT).show();
    }
    //修改用戶信息的操作
    //調用UserDao的updateUsers()方法將編號為2的用戶的用戶名稱修改為Toms
    public void updateUser(View view) throws SQLException {

        UsersDao dao=new UsersDao(this);
        Users user=dao.getUserById(2);
        user.setUname("Toms");
        boolean res=dao.updateUsers(user);
        Toast.makeText(this, "修改用戶結果是:"+res, Toast.LENGTH_SHORT).show();
    }
    //添加部門的操作
    //調用DeptDaod的addDept()方法添加一個學工部
    public void addDept(View view) throws SQLException {
        TbDept dept=new TbDept(0,"學工部");
        new DeptDao(this).addDept(dept);
        Toast.makeText(this, "添加部門成功", Toast.LENGTH_SHORT).show();
    }
    //查詢部門的操作
    //調用DeptDao的findDeptList()方法從資料庫中獲取所有的部門信息放入list集合中
    public void findDeptList(View view) throws SQLException {
        List<TbDept> list=new DeptDao(this).findDeptList();
        //對list集合進行迴圈遍歷,獲取出部門編號、部門名稱、該部門員工的人數
        for(TbDept dept:list){
            Log.i("DeptList:",dept.get_id()+","+dept.getDname()+","+dept.getEmps().size());
        }
    }
    //添加員工的操作
    //調用TbEmp()實體對象封裝一名員工信息
    //再調用EmpDao中的addEmp()方法將員工信息添加到資料庫
    //我們在員工表裡再綁定他所在的部門
    public void addEmp(View view) throws SQLException {
        TbEmp emp=new TbEmp(0,"Kite",22,"男");
        //取出學術部
        TbDept dept=new DeptDao(this).getDeptById(2);
        //綁定員工和部門
        emp.setDept(dept);
        //保存員工
        new EmpDao(this).addEmp(emp);
        Toast.makeText(this, "添加員工成功", Toast.LENGTH_SHORT).show();
    }
    //查詢員工信息的操作
    //調用EmpDao中的findempList()方法從資料庫中查詢出來放入list集合
    public void findEmpList(View v) throws Exception{
        List<TbEmp> emps=new EmpDao(this).findEmpList();
        //退list集合進行迴圈遍歷,查詢出所有員工的編號、姓名、部門名稱
        for (TbEmp emp:emps){
            Log.i("EmpList:",emp.get_id()+","+emp.getEname()+","+emp.getDept().getDname());
        }
    }
}

3、dao/DeptDao.java

package com.nf.dao;
import android.content.Context;

import com.nf.entity.TbDept;
import com.nf.utils.DbHelper;

import java.sql.SQLException;
import java.util.List;

public class DeptDao {

    private DbHelper dbHelper;
    public DeptDao(Context context){
     //實例化DbHelper dbHelper
=DbHelper.getInstance(context); } public boolean addDept(TbDept dept) throws SQLException {
     //通過dbHelper調用getDaos() dbHelper.getDaos(TbDept.
class).create(dept); return true; } public List findDeptList() throws SQLException { return dbHelper.getDaos(TbDept.class).queryForAll(); } public TbDept getDeptById(int id) throws SQLException { return (TbDept) dbHelper.getDaos(TbDept.class).queryForId(id); } }

4、dao/EmpDao.java

package com.nf.dao;
import android.content.Context;

import com.nf.entity.TbEmp;
import com.nf.utils.DbHelper;

import java.sql.SQLException;
import java.util.List;

/**
 * Created by Administrator on 2017/12/13.
 */

public class EmpDao {

    private DbHelper dbHelper;
    public EmpDao(Context context){
        dbHelper=DbHelper.getInstance(context);
    }

    public boolean addEmp(TbEmp emp) throws SQLException {
        dbHelper.getDaos(TbEmp.class).create(emp);
        return true;
    }

    public List findEmpList() throws SQLException {
        return dbHelper.getDaos(TbEmp.class).queryForAll();
    }
}

5、dao/UsersDao.java

package com.nf.dao;
import android.content.Context;

import com.nf.entity.Users;
import com.nf.utils.DbHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.DeleteBuilder;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.UpdateBuilder;

import java.sql.SQLException;
import java.util.List;

/**
 * Created by Administrator on 2017/12/13.
 */

public class UsersDao {

    private DbHelper dbHelper;
    private Dao dao;//DbHelper對象提供的一個對象持久化類
    public UsersDao(Context context){
        dbHelper=new DbHelper(context);
        try {
            dao=dbHelper.getDao(Users.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //添加一個用戶
    public boolean addUsers(Users user) throws SQLException {
        dao.create(user);
        return true;
    }

    //修改一個用戶
    public boolean updateUsers(Users user) throws SQLException {
        dao.update(user);
        return true;
    }

    //刪除一個用戶
    public boolean deleteUsers(Users user) throws SQLException {
        dao.delete(user);
        return true;
    }

    public Users getUserById(int id) throws SQLException {
        Users user=(Users) dao.queryForId(id);
        return user;
    }

    public List getUserList() throws SQLException {
        List list=dao.queryForAll();
        return list;
    }

    //==============批量操作=============//
    public boolean addUsers(List<Users> users) throws SQLException {
        dao.create(users);
        return true;
    }
    public boolean deleteUsers(List<Users> users) throws SQLException {
        dao.delete(users);
        return true;
    }

    //==============帶條件修改刪除查詢=============//
    public boolean updateUsersByPwd(String query) throws SQLException {
        UpdateBuilder builder=dao.updateBuilder();
        builder.where().like("upwd",query);
        builder.updateColumnValue("upwd","123456");
        builder.update();
        return true;
    }

    public boolean deleteUsers(String name) throws SQLException {
        DeleteBuilder builder=dao.deleteBuilder();
        builder.where().eq("uname",name);
        builder.delete();
        return true;
    }
    public List findUserList(String name) throws SQLException {
        QueryBuilder builder=dao.queryBuilder();
        builder.where().like("uname","%"+name+"%");
        builder.orderBy("uintime",true);
        List list=builder.query();
        return list;
    }
}

6、entity/TbDept.java

package com.nf.entity;
import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

import java.io.Serializable;

/**
 * Created by Administrator on 2017/12/13.
 */
@DatabaseTable(tableName = "tb_dept") //通過註解的方式設置部門表的表名
public class TbDept implements Serializable {

    @DatabaseField(generatedId = true)//設置部門編號 generatedId = true表示編號自動增長
    private int _id;
    @DatabaseField //預設設置
    private String dname;

    //一對多的關係
    @ForeignCollectionField(eager = false)
    private ForeignCollection<TbEmp> emps;

    public TbDept() {
    }

    public TbDept(int _id, String dname) {
        this._id = _id;
        this.dname = dname;
    }

    public int get_id() {
        return _id;
    }

    public void set_id(int _id) {
        this._id = _id;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public ForeignCollection<TbEmp> getEmps() {
        return emps;
    }

    public void setEmps(ForeignCollection<TbEmp> emps) {
        this.emps = emps;
    }
}

7、entity/TbEmp.java

package com.nf.entity;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

import java.io.Serializable;

/**
 * Created by Administrator on 2017/12/13.
 */
@DatabaseTable(tableName = "tb_emp")
public class TbEmp implements Serializable {

    @DatabaseField(generatedId = true)
    private int _id;
    @DatabaseField
    private String ename;
    @DatabaseField
    private int eage;
    @DatabaseField
    private String esex;

    //多對一的關係
    @DatabaseField(columnName = "edno",foreign = true,foreignAutoRefresh = true,canBeNull = false)
    private TbDept dept;

    public TbEmp() {
    }

    public TbEmp(int _id, String ename, int eage, String esex) {
        this._id = _id;
        this.ename = ename;
        this.eage = eage;
        this.esex = esex;
    }

    public int get_id() {
        return _id;
    }

    public void set_id(int _id) {
        this._id = _id;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public int getEage() {
        return eage;
    }

    public void setEage(int eage) {
        this.eage = eage;
    }

    public String getEsex() {
        return esex;
    }

    public void setEsex(String esex) {
        this.esex = esex;
    }

    public TbDept getDept() {
        return dept;
    }

    public void setDept(TbDept dept) {
        this.dept = dept;
    }
}

8、entity/Users.java

package com.nf.entity;

import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

import java.io.Serializable;
import java.util.Date;

/**
 * Created by Administrator on 2017/12/13.
 */
@DatabaseTable(tableName = "tb_users")
public class Users implements Serializable{

    @DatabaseField(generatedId = true)
    private int _id;
    @DatabaseField(canBeNull = false)
    private String uname;
    @DatabaseField(canBeNull = false)
    private String upwd;
    @DatabaseField(dataType = DataType.DATE)
    private Date uintime;

    public Users() {
    }

    public Users(int _id, String uname, String upwd, Date uintime) {
        this._id = _id;
        this.uname = uname;
        this.upwd = upwd;
        this.uintime = uintime;
    }

    public int get_id() {
        return _id;
    }

    public void set_id(int _id) {
        this._id = _id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    public Date getUintime() {
        return uintime;
    }

    public void setUintime(Date uintime) {
        this.uintime = uintime;
    }
}

9、DbHelper.java

package com.nf.utils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.widget.Toast;

import com.nf.entity.TbDept;
import com.nf.entity.TbEmp;
import com.nf.entity.Users;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

import java.util.Date;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
//構建一個DbHelper類繼承OrmLiteSqliteOpenHelper 實現對資料庫的操作
public class DbHelper extends OrmLiteSqliteOpenHelper {
    //定義資料庫名稱
    private static final String DATABASE_NAME="ormlite.db";
    //定義資料庫的版本
    private static final int VERSION=3;
    //構造器,將上下文對象、資料庫名稱、工廠、版本信息初始化
    public DbHelper(Context context) {//用於通過註解+反射創建資料庫表
        super(context, DATABASE_NAME, null, VERSION);//用於通過讀取配置文件創建資料庫表
    }
    private DbHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
        super(context, DATABASE_NAME, null, VERSION);
    }

    //第一次創建資料庫時執行
    @Override
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
        try {
            //創建表Tb_users
            TableUtils.createTableIfNotExists(connectionSource, Users.class);
            //創建表Tb_dept
            TableUtils.createTableIfNotExists(connectionSource, TbDept.class);
            //創建表Tb_emp
            TableUtils.createTableIfNotExists(connectionSource, TbEmp.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        //加入測試數據
        try {
            //調用Dao中的getDao()方法傳入一個實體對象,實體對象里封裝一個用戶,通過create()方法,將這個用戶初始化到tb_users數據表中
            Dao dao=getDao(Users.class);//創建一個Users類的Dao
            dao.create(new Users(0,"admins","admins",new Date()));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        Log.i("create table","創建數據表成功");
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        try {
            TableUtils.dropTable(connectionSource,Users.class,true);
            TableUtils.dropTable(connectionSource,TbEmp.class,true);
            TableUtils.dropTable(connectionSource,TbDept.class,true);
            onCreate(database,connectionSource);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //===================提供單例模式DbHelper對象提供服務=========================//
    private static DbHelper dbHelper;

    public static synchronized DbHelper getInstance(Context context){
        if(dbHelper==null){
            dbHelper=new DbHelper(context);
        }
        return dbHelper;
    }

    //==================構建一個Dao棧,統一管理Dao=======================//
    private Map<String,Dao> daos=new HashMap<String,Dao>();

    public Dao getDaos(Class cls) throws SQLException {
        String className=cls.getName();//獲取類名
        if(!daos.containsKey(className)){
            daos.put(className,super.getDao(cls));
        }
        return daos.get(className);
    }

    //重寫DbHelper的close方法
    @Override
    public void close() {
        super.close();
        Iterator it=daos.keySet().iterator();
        while(it.hasNext()){
            Dao dao=(Dao) it.next();
            dao=null;
        }
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 同步和非同步的概念區別: 同步,必須執行完成某個問題後才能繼續執行其他的。 非同步,我會去先執行其他問題,你執行完之後返回給我一個結果就可以。 android中為什麼要引用非同步任務呢 android啟動的,會啟動一個線程也稱為主線程,UI線程,但是我們不能把所有耗時的任務交給主線程來完成,這樣會影響用戶 ...
  • GsonFormat插件可以根據JSONObject格式的字元串,自動生成實體類參數。 要使用這個插件,首先要做的事下載它。方法如下: 方法一: 1.Android studio File->Settings..->Plugins–>Browse repositores..搜索GsonFormat  ...
  • 應用包下載地址: https://github.com/kingthy/TVRemoteIME/raw/master/released/IMEService-release.apk TVRemoteIME 電視盒子的遠程輸入法應用,可跨屏遠程輸入和跨屏遠程式控制制盒子 應用的誕生 自從家裡有電視盒子以來 ...
  • 使用之前,先簡單介紹一下這個SwipeRecyclerView,這是嚴大(嚴振傑)基於RecyclerView的進行修改和封裝的高級RecyclerView,其可以實現像QQ聊天界面的側滑刪除菜單,和一些高級的功能,我這裡也就不一一列舉出來了 想要瞭解更多的同學,請看這一篇,作者寫的http://b ...
  • 1. Block 1.1 什麼是Block 之前都是對block的簡單實用,這裡重新瞭解下。 代碼塊Block是蘋果在iOS4開始引入的對C語言的擴展,實現匿名函數的特性,Block是一種特殊的數據類型,其可以正常定義變數、作為參數、作為返回值,特殊的,block還可以保存一段代碼,在需要的時候調用 ...
  • 主要涉及類:MediaPlayer(1) 當一個MediaPlayer對象被創建或者調用reset()方法之後,它處於空閑狀態,調用release()方法後處於結束狀態1,一個MediaPlayer對象調用了reset()方法後,再調用其它方法可能會觸發OnErrorListener.onError ...
  • NO是常開(NORMAL OPEN),就是通常即未通電狀態下,是斷開的,通電後在電磁線圈的作用下(吸合)處於閉合狀態。NC是常閉(NORMAL CLOSE),就是通常即未通電狀態下,是閉合的,通電後在電磁線圈的作用下(吸合)處於斷開狀態。 指接觸器、繼電器等電氣開關元件輔助觸點在常態下(未通電時)的 ...
  • 1、activity_main.xml 2、MainActivity.java 3、utils/FileUtils.java 4、utils/UriUtils.java 5、AndroidManifest.xml ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...