JDBC之MVC模式
阿新 • • 發佈:2017-07-06
tin eat date getaddr 姓名 lec ram query 完整
package com.j1702.model; //定義類 public class Student { private Integer id; private String name; private Integer age; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() {return id; } public void setId(Integer id) { this.id = id; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) {this.address = address; } }
package com.j1702.db; import java.sql.*; public class DBUtil {//創建工具類 private static final String URL="jdbc:mysql://127.0.0.1:3306/jdbc_test"; private static final String USER="root"; private static final String PASSWORD="123456"; //實例化一個鏈接對象conn privatestatic Connection conn=null; static{//靜態方法塊 try { //1, 加載驅動程序 Class.forName("com.mysql.jdbc.Driver"); //2, 獲得數據庫鏈接對象 conn conn=DriverManager.getConnection(URL, USER, PASSWORD);//直接獲得conn實例對象 或者用下面這種 //setConn(DriverManager.getConnection(URL, USER, PASSWORD));//通過set方法獲得conn實例對象 } catch (Exception e) { e.printStackTrace(); } } public static Connection getConn() { return conn; } public static void setConn(Connection conn) { DBUtil.conn = conn; } }
package com.j1702.dao; import java.sql.*; import java.util.*; import com.j1702.db.DBUtil; import com.j1702.model.Student; public class StudentDao { //1、增 public static void add(Student stu) throws Exception{ //通過工具類,獲取數據庫鏈接對象 Connection conn=DBUtil.getConn(); //創建 sql 語句(?占坑) String sql="insert Student (name,age,address) values(?,?,?)"; //創建欲加載的sql語句執行對象 PreparedStatement ptmt=conn.prepareStatement(sql); //給名字賦值 ptmt.setString(1,stu.getName()); //給年齡賦值 ptmt.setInt(2, stu.getAge()); //給地址賦值 ptmt.setString(3, stu.getAddress()); //執行sql語句 ptmt.execute(); } //2、刪 public static void delete(Integer id) throws Exception{ //通過工具類,獲取數據庫鏈接對象 Connection conn=DBUtil.getConn(); //創建 sql 語句(?占坑) String sql="delete from Student where id=?"; //創建欲加載的sql語句執行對象 PreparedStatement ptmt=conn.prepareStatement(sql); //給id賦值 ptmt.setInt(1,id); //執行sql語句 ptmt.execute(); } //3、改 public static void update(Student stu,Integer id) throws Exception{ //通過工具類,獲取數據庫鏈接對象 Connection conn=DBUtil.getConn(); //創建 sql 語句(?占坑) String sql="update Student set name=?,age=?,address=? where id=?"; //創建欲加載的sql語句執行對象 PreparedStatement ptmt=conn.prepareStatement(sql); //給名字賦值 ptmt.setString(1,stu.getName()); //給年齡賦值 ptmt.setInt(2, stu.getAge()); //給地址賦值 ptmt.setString(3, stu.getAddress()); //給id賦值 ptmt.setInt(4, id); //執行sql語句 ptmt.execute(); } //4、查所有 public static void query() throws Exception{ //通過工具類,獲取數據庫鏈接對象 Connection conn=DBUtil.getConn(); //創建 sql 語句(?占坑) String sql="select * from Student"; //創建欲加載的sql語句執行對象(在只執行一句sql語句時使用該語句,需要循環執行sql語句時用另一種) Statement stmt=conn.createStatement(); //用結果集ResultSet創建對象來接收sql語句返回的數據集 ResultSet rs=stmt.executeQuery(sql); while (rs.next()) { System.out.println("id:"+rs.getInt("id")+"\tname:"+rs.getString("name")+ "\tage:"+rs.getInt("age")+"\taddress:"+rs.getString("address")); } } //5、查某個 public static void queryWithId(Integer id) throws Exception{ //通過工具類,獲取數據庫鏈接對象 Connection conn=DBUtil.getConn(); //創建 sql 語句(?占坑) String sql="select * from Student where id=?"; //創建欲加載的sql語句執行對象 PreparedStatement ptmt=conn.prepareStatement(sql); ptmt.setInt(1, id); ResultSet rs=ptmt.executeQuery(); while (rs.next()) { System.out.println("id:"+rs.getInt("id")+"\tname:"+rs.getString("name")+ "\tage:"+rs.getInt("age")+"\taddress:"+rs.getString("address")); } } //6、條件查詢 public static void queryWithParam(List<Map<String, Object>> param) throws Exception{ Connection conn=DBUtil.getConn();//得到鏈接對象 StringBuffer sql=new StringBuffer(); sql.append("select * from Student where 1=1"); for(Map<String, Object>map:param){ sql.append(" and "+map.get("key")+" = ‘"+map.get("value") + "‘"); } PreparedStatement ptmt=conn.prepareStatement(sql.toString()); ResultSet rs=ptmt.executeQuery(); while(rs.next()){ System.out.println("id:"+rs.getInt("id")+"\tname:"+rs.getString("name")+ "\tage:"+rs.getInt("age")+"\taddress:"+rs.getString("address")); } } //7、按包含某個字符查詢 public static void queryWithChar(List<Map<String, Object>> param) throws Exception{ Connection conn=DBUtil.getConn();//得到鏈接對象 StringBuffer sql=new StringBuffer(); sql.append("select * from Student where 1=1"); for(Map<String, Object>map:param){ sql.append(" and "+map.get("key")+" like ‘%"+map.get("value") + "%‘"); } PreparedStatement ptmt=conn.prepareStatement(sql.toString()); ResultSet rs=ptmt.executeQuery(); while(rs.next()){ System.out.println("id:"+rs.getInt("id")+"\tname:"+rs.getString("name")+ "\tage:"+rs.getInt("age")+"\taddress:"+rs.getString("address")); } } }
package com.j1702.action; import java.util.List; import java.util.Map; import com.j1702.dao.StudentDao; import com.j1702.model.Student; //這一層是Controller 層:是為view層和model層服務的 public class StudentAction { //向數據庫中插入一條數據 public static void insert(Student stu) throws Exception{ StudentDao.add(stu); } //根據傳入的id刪除學生 public static void delete(Integer id) throws Exception{ StudentDao.delete(id); } //更新數據 public static void update(Student stu,Integer id) throws Exception{ StudentDao.update(stu,id); } //查找數據 public static void find(List<Map<String, Object>> param) throws Exception{ StudentDao.queryWithParam(param); } //按某個字符查詢 public static void findOfChar(List<Map<String, Object>> param) throws Exception{ StudentDao.queryWithChar(param); } //查看詳情 public static void show() throws Exception{ StudentDao.query(); } }
package com.j1702.view; import java.util.*; import com.j1702.model.Student; import com.j1702.action.StudentAction; //註意:以下例子並不完整,存在許多BUG和不合理之處。 public class TestView { public static void main(String[] args) throws Exception { //編程以終端為view層,實現數據的 增、刪、改、查的操作 /** * 請輸入你要做的操作:A 添加,D 刪除,U 更新,F 查詢,exit 退出 * * 請輸入插入數據的name age address * * 請輸入你要做的操作:A 添加,D 刪除,U 更新,F 查詢,exit 退出 * */ action(); } public static void action() throws Exception{ while(true){ System.out.println("A 添加 D 刪除 U 更新 F 查詢 E 退出\n請選擇您想要進行的操作:"); Scanner scan0=new Scanner(System.in); String key0=scan0.next(); //scan0.close(); switch (key0) { case "A": Add(); break; case "D": Del(); break; case "U": UpDat(); break; case "F": Find(); break; case "E": return; default: System.out.println("對不起!沒有你輸入的選項,請重寫輸入!"); break; } } } //添加學生 public static void Add() throws Exception{ Student stu=creatCode(); StudentAction.insert(stu); } //刪除學生 public static void Del() throws Exception{ System.out.println("請輸入你要刪除的學生的id號:"); Scanner scan4=new Scanner(System.in); int id=scan4.nextInt(); StudentAction.delete(id); scan4.close(); } //替換學生 public static void UpDat() throws Exception{ Student stu=creatCode();//創建Student System.out.println("請輸入你要修改的學生的id號:"); Scanner scan5=new Scanner(System.in); int id=scan5.nextInt(); StudentAction.update(stu, id); scan5.close(); } //查找學生 public static void Find() throws Exception{ System.out.println("該數據庫的字段有:id name age address"); List<Map<String, Object>> li=new ArrayList<Map<String,Object>>(); a: while (true) { Map<String, Object> map=mp(); li.add(map); b: while (true) { System.out.println("請選擇: 1,繼續輸入查詢條件 2,開始查詢"); Scanner scan8=new Scanner(System.in); int key2=scan8.nextInt(); switch (key2) { case 1: continue a; case 2: break a; default: System.out.println("對不起沒有您輸入的選項!請重新選擇!"); continue b; } } } //StudentAction.find(li);//多條件查詢 StudentAction.findOfChar(li);//模糊多條件查詢 } //創建map對象 public static Map<String, Object> mp(){ Map<String,Object> map=new HashMap<String,Object>(); System.out.println("請輸入您想要查詢的字段:"); Scanner scan7=new Scanner(System.in); String key1=scan7.next(); map.put("key",key1); System.out.println("請輸入您想要查詢字段中的值:"); Scanner scan6=new Scanner(System.in); String input=scan6.next(); if(key1.equals("age") | key1.equals("id")){ Integer integer=Integer.parseInt(input); map.put("value", integer); }else if(key1.equals("name") | key1.equals("address")){ map.put("value", input); } return map; } //創建新學生對象 public static Student creatCode(){ Student stu=new Student(); System.out.println("請輸入該學生的姓名:"); Scanner scan1=new Scanner(System.in); String name=scan1.next(); stu.setName(name); //scan1.close(); System.out.println("請輸入該學生的年齡:"); Scanner scan2=new Scanner(System.in); int age=scan2.nextInt(); stu.setAge(age); //scan2.close(); System.out.println("請輸入該學生的地址:"); Scanner scan3=new Scanner(System.in); String address=scan3.next(); stu.setAddress(address); //scan3.close(); return stu; } }
JDBC之MVC模式