首页 分享 JDBC与DAO模式实践

JDBC与DAO模式实践

来源:萌宠菠菠乐园 时间:2026-03-29 15:07
文章目录 一、实验目的二、 实验内容三、程序设计思想(流程图,或算法思想或设计方案等)四、源代码jdbc0.Properties配置文件数据:五、测试与运行六、总结

一、实验目的

掌握JDBC各种数据的连接和增删改查,事务的基本操作;理解DAO模式;应用DAO模式解决实际问题。

二、 实验内容

自己任意设计一个表(如图书,商品,玩具,宠物等,不要和课内练习相同的表),编写控制台程序对其进行增删改查操作。控制台显示列表菜单。如下图所示:

三、程序设计思想(流程图,或算法思想或设计方案等)

Mysql驱动类型:mysql-connector-java-5.1.7-bin.jar
数据库初始状态如下:

在这里插入图片描述

List all students
在这里插入图片描述

find student by its id
在这里插入图片描述

update a student
在这里插入图片描述

在这里插入图片描述

add a new student
在这里插入图片描述

在这里插入图片描述

delete an student by id
在这里插入图片描述

在这里插入图片描述

四、源代码

import java.util.List; import java.util.Scanner; public class Test1 { public static int flag_test; public static void main(String[] args) throws Exception { userDao user = new userDao(); user.login(); System.out.println("登陆成功"); Scanner in = new Scanner(System.in); System.out.println("1.list all studentsn2.find student by its idn3.update a studentn4.add a new studentn5.delete an student by id"); System.out.println("请输入所需要进行操作:"); int number = in.nextInt(); switch (number) { case 4: in = new Scanner(System.in); System.out.println("请输入学号:"); String Sid = in.next(); System.out.println("请输入姓名:"); String name = in.next(); System.out.println("请输入年龄:"); int age = in.nextInt(); System.out.println("请输入分数:"); int score = in.nextInt(); user.add(Sid, name, age, score); break; case 5: System.out.println("请输入学号:"); Sid = in.next(); user.delete(Sid); break; case 3: System.out.println("请输入姓名:"); name = in.next(); System.out.println("请输入修改后分数:"); score = in.nextInt(); user.modify(score, name); break; case 2: in = new Scanner(System.in); System.out.println("请输入ID:"); Sid = in.next(); User users = user.check(Sid); System.out.println(users); break; case 1: String sql = "select sid,name,age,score from Users"; List<User> list = user.checkAll(User.class, sql); list.forEach(System.out::println); break; default: System.out.println("未正确选择,goodbye"); break; } } }

c

运行

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.sql.Connection; import java.sql.DriverManager; public class userDao { public static PreparedStatement ps; public static Connection conn=null; public void login(){ InputStream is=Test1.class.getClassLoader().getResourceAsStream("jdbc0.properties"); if(is==null){ System.out.println("空的"); return ; } Properties pros=new Properties(); try { pros.load(is); } catch (IOException e) { e.printStackTrace(); } //1.读取配置文件中的四个基本信息 String url= pros.getProperty("url"); String user=pros.getProperty("user"); String password=pros.getProperty("password"); String driverclass=pros.getProperty("driverClass"); //2.加载驱动 try { Class.forName(driverclass); } catch (ClassNotFoundException e) { e.printStackTrace(); } //3.获取连接 try { conn= DriverManager.getConnection(url,user,password); } catch (SQLException e) { e.printStackTrace(); } } public void add(String sid,String NAME,int age,int score){ //4.预编译sql语句,返回PreparedStatement的实例 String sql="insert into Users(sid,NAME,age,score) values(?,?,?,?)"; PreparedStatement ps= null; try { ps = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } //5.填充占位符 try { ps.setString(1,sid); ps.setString(2,NAME); ps.setInt(3,age); ps.setInt(4,score); //6.执行操作 ps.execute(); //7.资源的关闭 ps.close(); } catch (SQLException e) { e.printStackTrace(); } } public void delete(String sid){ String sql="DELETE FROM Users WHERE sid=?"; try { PreparedStatement ps=conn.prepareStatement(sql); ps.setString(1,sid); ps.execute(); //7.资源的关闭 ps.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public User check(String checks){ String sql="select sid,name,age,score from Users where sid = ?"; try { ps=conn.prepareStatement(sql); ps.setString(1,checks); //得到结果集 ResultSet resultSet=ps.executeQuery(); //处理结果集 if(resultSet.next()){ //判断结果集的下一条是否有数据,如果有数据返回true,并指针下移,如果返回false,指针不会下移 //获取当前这条数据的各个字段值 String id =resultSet.getString(1); String name=resultSet.getString(2); int age=resultSet.getInt(3); double score=resultSet.getDouble(4); //把属性封装在java类中来进行表示 User user=new User(id,name,age,score); return user; } } catch (SQLException e) { e.printStackTrace(); } return new User(); } public User checkss(String sql,Object...args){ try { ps=conn.prepareStatement(sql); for(int i=0;i<args.length;i++){ ps.setObject(i+1,args[i]); } ResultSet re=ps.executeQuery(); //获取结果集的元数据 ResultSetMetaData rsmd=re.getMetaData(); int columnCount=rsmd.getColumnCount(); if(re.next()){ User user=new User(); for(int i=0;i<columnCount;i++) { Object value= re.getObject(i+1); //获取每个列的列名 String columnName=rsmd.getColumnName(i+1); //给user对象指定的columnName属性,赋值为columValue Field field= null; try { field = User.class.getDeclaredField(columnName); field.setAccessible(true); field.set(user,value); } catch (Exception e) { e.printStackTrace(); } } return user; } } catch (SQLException e) { e.printStackTrace(); } return null; } public List<User> checkAll(Class<User> clazz,String sql,Object...args){ try { ps=conn.prepareStatement(sql); for(int i=0;i<args.length;i++){ ps.setObject(i+1,args[i]); } ResultSet re=ps.executeQuery(); //获取结果集的元数据 ResultSetMetaData rsmd=re.getMetaData(); int columnCount=rsmd.getColumnCount(); //创建集合对象 ArrayList <User> list=new ArrayList<User>(); while(re.next()){ User user=clazz.newInstance(); for(int i=0;i<columnCount;i++) { Object value= re.getObject(i+1); //获取每个列的列名 // String columnName=rsmd.getColumnName(i+1); String columnLabel=rsmd.getColumnLabel(i+1); //给user对象指定的columnName属性,赋值为columValue try { Field field = User.class.getDeclaredField(columnLabel); field.setAccessible(true); field.set(user,value); } catch (Exception e) { e.printStackTrace(); } } list.add(user); } return list; } catch (Exception e) { e.printStackTrace(); } return null; } public void modify(int score,String name){ String sql="update Users set score=? where name=?"; try { ps=conn.prepareStatement(sql); //5.填充占位符 ps.setInt(1,score); ps.setString(2,name); //6.执行操作 ps.execute(); //7.资源的关闭 ps.close(); } catch (SQLException e) { e.printStackTrace(); } } public User seek(String sid,String NAME){ String sql="select sid,name,age,score from Users where sid=?"; try { ps=conn.prepareStatement(sql); //5.填充占位符 ps.setString(1,sid); //6.执行并返回结果集 ResultSet resultSet =ps.executeQuery(); if(resultSet.next()) { resultSet.previous(); //7.处理结果集 if (resultSet.next()) {//next()判断结果集的下一条是否有数据,如果有数据返回true,并指针下移;如果返回false,指针不会下移 //获取当前这条数据的各个字段的值 String id =resultSet.getString(1); String name=resultSet.getString(2); int age=resultSet.getInt(3); double score=resultSet.getDouble(4); //把属性封装在java类中来进行表示 User user=new User(id,name,age,score); return user; } } } catch (SQLException e) { e.printStackTrace(); } return new User(); } } public class User { private String sid; private String name; private Integer age; private Double score; public User(){ } //全参构造方法 public User(String sid, String name, Integer age, Double score) { this.sid = sid; this.name = name; this.age = age; this.score = score; } @Override public String toString(){ return "Sid="+sid+"tname="+name+"tage="+age+"tscrore="+score; } public Double getScore() { return score; } public void setScore(Double score) { this.score = score; } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }

c

运行

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284

jdbc0.Properties配置文件数据:

user=*** password=**** url=jdbc:mysql://localhost:3306/test driverClass=com.mysql.jdbc.Driver

c

运行

1234

五、测试与运行

在调试程序的过程中遇到什么问题,是如何解决的?
没什么问题测试数据及运行结果。(无测试数据的,直接记录运行结果)
进行list all的时候,用到反射机制,这里的话就需要注意对象中的属性类型和数据库的表中的列类型必须对应,否则反射时会进行报错

六、总结

加油 1

相关知识

JDBC简介与示例
DAO模式宠物管理系统:引领宠物店数字化管理新风尚
使用DAO模式开发宠物管理系统
JDBC连接 数据库
医学检验技术专业工学结合人才培养模式改革与实践
Mysql第8章DAO模式上机练习
java与数据库连接实现宠物商店管理系统
宠物商城微信小程序及后端设计实现源码
大宗淡水鱼类湖泊生态养殖模式的建立与实践
宠物商店详细设计说明书

网址: JDBC与DAO模式实践 https://www.mcbbbk.com/newsview1360016.html

所属分类:萌宠日常
上一篇: 鹦鹉说:新手也能养出快乐小话痨!
下一篇: 武汉靠谱宠物店推荐的养宠小贴士!

推荐分享