一个简单的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;积木编程最重要的是积木如何搭建…

Android之使用getIdentifier()获取资源Id

使用getIdentifier()方法可以方便的获各应用包下的指定资源ID。主要有两种方法&#xff1a;&#xff08;1&#xff09;方式一Resources resources context.getResources();int indentify resources. getIdentifier( org.loveandroid.androidtest:drawable/icon", null, …

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

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

为什么要“男孩穷养、女孩富养”

所谓富养女&#xff0c;是说女儿要精细地养&#xff0c;就是在家庭经济条件许可的前提下&#xff0c;尽可能地满足女儿对物质的需求&#xff0c;送她们去参加钢琴、小提琴、音乐、形体等方面的训练&#xff0c;培养她们的高雅气质和大家闺秀的涵养……要从小宠她、爱她,培养她的…

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

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

ELKstack-Elasticsearch各类安装部署方法

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

Android之 如何在退出一个activity后,很好的取消AsyncTask继续运行

public class Task extends AsyncTask<Void, Void, Void>{Override protected Void doInBackground(Void... path) { // Task被取消了&#xff0c;马上退出循环 if(isCancelled()) return null; }Override public void onProgressUpdate(File... files) { // Task被取消了…

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

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

我的博客初始化

我是一名在读学生&#xff0c;平时没有摘抄、写日记、笔记之类的习惯&#xff0c;自从在amobbs上发了一篇lwip的移植记录&#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…

在.Net环境下使用elasticsearch实现大数据量的搜索

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域&#xff0c;Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。Elasticsearch使用标准的RESTful API和JSON。我们还用多种语言构建和维护客户机&#xff0c;如Java、Pyth…

鸿蒙手机启动器apk下载,澪Pro启动器本体下载最新版

澪Pro启动器本体下载最新版专为我的世界的玩家们打造&#xff0c;可以在这里自由安装不同mod&#xff0c;也可以自定义编辑丰富的游戏内容&#xff0c;感受全新精彩的沙盒冒险玩法乐趣&#xff0c;更有丰富的资源和皮肤提供给玩家们&#xff0c;畅爽的玩法模式&#xff0c;沉浸…

当前联机日志损坏恢复

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

Android之 如何解决ScrollView 和ListView滑动冲突的问题如何解决ScrollView can host only one direct child

android 采用ScrollView布局时出现异常:ScrollView can host only one direct child。 解决办法:主要是ScrollView内部只能有一个子元素,即不能并列两个子元素,所以需要把所有的子元素放到一个LinearLayout内部或 RelativeLayout等其他布局 如何解决ScrollView 和ListVi…

mysql 中执行的 sql 注意字段之间的反向引号和单引号

如下的数据表 create table test( id int(11) not null auto_increment primary key, user varchar(100) not null, flag char(2) not null default ok ); 当查询时应该写成 $sql "select user from test where flagok "; 字段是数据表的&#xff0c;用 &#xff08…

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

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

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

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