效果圖: 項目目錄截圖: 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; } } }