控制层Action接受从模型层DAO传来的数据,显现在视图层上。
package Action;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;import DAO.StuDAO; import Model.Student; import Util.DBUtil;public class StuAction {public static void main(String args[]) throws Exception {Connection conn = DBUtil.getConnection();Statement stmt = conn.createStatement(); // ResultSet rs = stmt.executeQuery("select * from stuInfoTable");// while(rs.next()) { System.out.println(rs.getInt(1)+" "+ rs.getString(2)+" "+rs.getString(3)); }//不是直接 Student stu = null,这样试空指针Student stu = new Student();stu.setStuID(5);stu.setName("王五");stu.setSex("女");StuDAO sd = new StuDAO();//sd.addStu(stu);// stu.setName("马六"); // stu.setSex("男"); // sd.updateStu(stu); sd.delStu(stu.getStuID());}//直接调用StuDAO的方法来更新 增加 删除public void add(Student stu) throws Exception {StuDAO sd = new StuDAO();sd.addStu(stu);}//通过控制层来 链接视图层 }
package DAO;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List;import Model.Student; import Util.DBUtil;public class StuDAO {Connection conn = DBUtil.getConnection();//一个一个传参数很麻烦 直接传一个对象//如果stuID设置了自动递增 就不需要插入了public void addStu(Student stu) throws Exception {String sql ="" + "insert into stuInfoTable" + "(" +" stuID,name,sex"+")" + "values(" + "?,?,?)";//这样的语句可以预加载在服务器里 execute后才会执行PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1, stu.getStuID());ps.setString(2, stu.getName());ps.setString(3, stu.getSex());ps.execute();}//和增加的逻辑一直 所以直接复制上述代码 然后修改sql语句//可以直接传过来stuID,但是这样需要根据ID去找Studentpublic void updateStu(Student stu) throws Exception {//不加where语句的话 所有的都会更新//注意下面的语句 一定要有空格String sql ="" + "update stuInfoTable " + "set " +"name=?,sex=? " + "where "+ "stuID=?";//这样的语句可以预加载在服务器里 execute后才会执行PreparedStatement ps = conn.prepareStatement(sql);//打印出来sql语句 发现 中间少了 空格 然后修改上面的sql语句 System.out.println(sql);//注意下面的 序号 要和update的序号一致ps.setString(1, stu.getName());ps.setString(2, stu.getSex());ps.setInt(3, stu.getStuID());ps.execute();}public void delStu(int stuID) throws Exception {String sql ="" + "delete stuInfoTable " +"where "+ "stuID=?";PreparedStatement ps = conn.prepareStatement(sql);ps.setInt(1, stuID);ps.execute();}//查询学生集合public List<Student> queryStu() throws Exception {Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("select * from stuInfoTable");List<Student> stuList = new ArrayList<Student>();Student stu = null;while(rs.next()) {stu = new Student();stu.setStuID(rs.getInt(1));stu.setName(rs.getString(2));stu.setSex(rs.getString(3));stuList.add(stu);}return stuList;}//查询一个学生//应该需要和上面重载的 但是为了做实验 先写完所有方法 再去实现public Student queryOneStu() {return null;}}
package Model;public class Student {int stuID;String name;String sex;public int getStuID() {return stuID;}public void setStuID(int stuID) {this.stuID = stuID;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}
package Util;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;import DAO.StuDAO; import Model.Student;public class DBUtil {private static Connection conn;static {String url = "jdbc:sqlserver://localhost:1433;databasename=stuDB";try {// 1.注册驱动\// Class.forName("com.mysql.jdbc.Driver");Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");// 2.获得数据链接conn = DriverManager.getConnection(url, "sa", "123456");} catch (ClassNotFoundException | SQLException e) {// TODO Auto-generated catch block e.printStackTrace();}}public static Connection getConnection() {return conn;} }