一个简单的MVC模式练习

  控制层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;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphQL 到底有什么魔力?

GraphQL 起源时间退回到 2012年的一个下午, 美国加利福尼亚州, facebook 的工程师们发现他们才上架没多久的移动端应用就收到了很多差评, 用户反映app响应慢&#xff0c;耗电严重等&#xff0c;经过分析后发现, 应用在第一次启动时, 会请求大量的后端api接口, 这其中包括用户自…

android root工具twrp,安卓手机没有twrp的情况,如何下刷入magisk并获得root权限.

安装adb工具从以上地址下载,然后解压到任意目录(例如C:\adb).将此目录添加到windows环境变量path中.在cmd中输入adb, fastboot等命令,如果"显示"xxx"不是内部或外部命令命令",那么说明你弄错了,去了解一下什么是环境变量吧.如果显示一堆英文,那么说明安装完…

VBA即用型代码手册之打开有密码保护的工作薄

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

⑥又是星期五,小试牛刀(编写定制标签)

前言 今天有点迷茫。是身体累了&#xff0c;还是心累了。有种觉得想大哭而无力的感觉&#xff08;可能心还没成熟,或是昨天羽毛球打累了&#xff09;。加油&#xff0c;Jeff Li. 活在当下&#xff0c;坚持打好基础&#xff0c;坚持刷ACM&#xff0c;坚持coding。 今天下午的小故…

技术分享|前端性能 关键性能指标以及测量工具介绍

源宝导读&#xff1a;对于一款商业软件产品而言&#xff0c;其性能表现往往会直接关系到它的生死存亡&#xff0c;这种说法一点也不夸张&#xff0c;数据显示&#xff0c;40&#xff05;的人放弃了加载时间超过3秒的网站。但是一个网页的加载时间&#xff0c;响应时间的“快”“…

ELKstack-Elasticsearch各类安装部署方法

手动安装部署Elasticsearch 开篇 开篇闲话&#xff0c;如果是新人在接触ELKstack什么都不懂的情况下&#xff0c;可以先看看各位前人写的关于ELKstack的博客&#xff0c;如何对ELKstack部署安装及使用&#xff0c;但是别人的东西只能作为借鉴&#xff0c;在自己搭建使用一定要以…

美国超人气漫画科普书!85%以上中学物理考点,5岁孩子秒懂物理

▲ 点击查看今年的高考&#xff0c;不得不说&#xff0c;一度被浙江学霸刷屏&#xff01;他总分720分&#xff0c;物理等3门满分的成绩&#xff0c;最终获得“浙江高考状元”。状元能摘得桂冠&#xff0c;除了日积月累的不断努力外&#xff0c;最重要的是&#xff0c;不断调整自…

gevent 学习笔记一

import geventdef a():print a starting....gevent.sleep(1)print a endingdef b():print b starting....gevent.sleep(1)print b endinggevent.joinall([gevent.spawn(a), gevent.spawn(b) ]) 结果显示&#xff0c;用gevent并不会因为gevent.sleep而造成阻塞,但用内置的time.s…

当前联机日志损坏恢复

2019独角兽企业重金招聘Python工程师标准>>> 环境模拟 删除状态为active的联机日志&#xff0c;然后强行关闭数据库 处理过程 SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1260720 bytes Variable Size 1426071…

权威杂志评选出的十个最伟大的公式,爱因斯坦的质能方程竟然只能排第六!简直神仙打架....

全世界只有3.14 % 的人关注了爆炸吧知识难决高下各有千秋当数学家得出方程式和公式&#xff0c;如同看到雕像&#xff0c;美丽的风景&#xff0c;听到优美的曲调等等一样而得到充分的快乐。——柯普宁公式&#xff0c;是数学世界中一道美丽的风景&#xff0c;一个小小的等式&am…

在Idea中测试各JVM语言的交互性

为什么80%的码农都做不了架构师&#xff1f;>>> 背景&#xff1a; 假设出现这样的场景&#xff0c;一个Java项目中&#xff0c;需要用其他语言来编写相关模块&#xff0c;但需要能被Java调用 测试工具&#xff1a;Idea12 测试语言&#xff1a;Groovy、Scala、Ko…

android pcm调节音量,调整PCM语音数据的音量

通过编程实现调整PCM的音量&#xff0c;具体做法是乘上一个固定的数&#xff0c;但是要考虑数据的溢出问题&#xff0c;代码如下&#xff1a;//调节PCM数据音量//comment : 对PCM数据的音量进行放大//parameter :// pData PCM数据// nLen PCM数据的长度// nBitsPerSample 每个S…

.NET 大会今日开幕 |这些白嫖福利不看肠子都悔青

{ 12.18 线上开幕 文末有福利 }2021 .NET 开发者大会&#xff0c;今日开幕你是否已经满怀期待&#xff0c;同时又有很多疑问“ 会场在哪里&#xff1f;” "哪些大咖会参加&#xff1f;"“ 技术主题有哪些&#xff1f;” “ 什么时间有福利&#xff1f;”…时间不多了…

asp.net web常用控件FileUpload(文件上传控件)

2019独角兽企业重金招聘Python工程师标准>>> FileUpload控件的主要中能&#xff1a;向指定目录上传文件&#xff0c;该控件包括一个文本框和一个浏览按钮。 常用的属性&#xff1a;FileBytes&#xff0c;FileContent、FileName、HasFile、PostedFile。 常用的方法&a…

设计模式:面向对象的设计原则下(ISP、DIP、KISS、YAGNI、DRY、LOD)

本文继续来介绍接口隔离原则&#xff08;ISP&#xff09;和依赖倒置原则&#xff08;DIP&#xff09;&#xff0c;这两个原则都和接口和继承有关。文章最后会简单介绍几个除了 SOLID 原则之外的原则。接口隔离原则&#xff08;ISP&#xff09;提起接口&#xff0c;开发人员的第…

ADB server didn't ACK

当我们通过eclipse开发Android应用时&#xff0c;会连接真机会使用模拟器进行仿真&#xff0c;有时候启动失败&#xff0c;会提示这样的错误。 工具/原料 Eclipse CMD命令窗口 方法/步骤 首先通过CMD启动adb服务。这个时候会提示启动失败。 服务启动失败的原因有很多&#xff0…

android方块密码输入框,Android仿微信/支付宝的方块密码输入框

在用到支付类或者验证类app时&#xff0c;都有一个简密的输入框。百度了下有个不错的帖子点击打开链接不过自己也写了个简单的类似的。不废话了。没图说个席八。懒得运行&#xff0c;直接截layout.xml的效果图先。布局文件android:layout_width"fill_parent"android:…