1. 程式人生 > >JDBC之MVC模式

JDBC之MVC模式

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
    private
static 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模式