JDBC的封装,自己总结的自己总结的自己总结的

dao (代码分层)命名规范:

1、com.XXX.dao    存放dao相关的类型 例如 StudentDAOImpl 处理 数据库的链接 存取数据

2、com.XXX.servlet    存放servlet相关的类 例如:StudentServlet 处理 与浏览器交互的类

3、com.XXX.entity     存放实体类 例如 Student 接受数据库对象模型

4、com.XXX.util         存放工具类 例如 DBUtil

操作步骤:

首先,创建一个数据库表单,起名为Studetn。内有:id、name、age、sex四个属性。将id设为主键并且设置自动递增。

第二,在数据库建立完表单之后,在Java中创建一个数据库表单的实体类。(类名和表名一致)

内有:

1、表单的属性值和属性的基本数据类型。

2、无参的构造函数。

3、有参的构造函数。

4、Get和Set方法。

5、toString方法。

第三:创建一个工具类。

内有:

1、写一个静态代码块。将注册驱动写入其中。

原因:驱动只需要加载一次即可,

所以写在静态代码段中(static),类的静态代码块,随着类的加载,只执行一次。

2、将建立连接进行封装。

3、将增删改的通用方法也一并进行封装。

第四,先在dao层创建一个接口

内有:

1、返回值类型和方法名、参数。

1.1、可根据增删改分为不同的写法。

1.2、两个以上的参数,全部使用对象传参。

第五:在dao层下创建一个包,命名为Impl,在这个包内创建一个接口实现类。

内有:

1、写入SQL语句,要增删改的内容可用占位符代替。

2、返回在工具类里给增删改通用方法设定的调用方法。

3、在返回调用方法里加入占位符所代表的对象。

第六:在servlet里创建测试类。

内有:

1、通过创建的实体类来赋值。

2、通过实现类来调用接口里的方法。

3、调用方法。

实例:

第一步:创建数据库表单。

第二步: 创建一个数据库表单的实体类。

1 packagecom.Wuchuang.entiy;2

3 public classStudent {4

5 private intid;6 privateString name;7 private intage;8 privateString sex;9

10

11 publicStudent() {12 }13

14 public Student(int id, String name, intage, String sex) {15 this.id =id;16 this.name =name;17 this.age =age;18 this.sex =sex;19 }20

21 public intgetId() {22 returnid;23 }24

25 public void setId(intid) {26 this.id =id;27 }28

29 publicString getName() {30 returnname;31 }32

33 public voidsetName(String name) {34 this.name =name;35 }36

37 public intgetAge() {38 returnage;39 }40

41 public void setAge(intage) {42 this.age =age;43 }44

45 publicString getSex() {46 returnsex;47 }48

49 public voidsetSex(String sex) {50 this.sex =sex;51 }52

53 @Override54 publicString toString() {55 return "Student{" +

56 "id=" + id +

57 ", name='" + name + '\'' +

58 ", age=" + age +

59 ", sex='" + sex + '\'' +

60 '}';61 }62 }

第三步:创建一个工具类。

1 packagecom.Wuchuang.util;2

3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.PreparedStatement;6 importjava.sql.SQLException;7

8 public classDBUtil {9 //注册驱动,驱动只需要加载一次即可10 //所以写在静态代码段中(static)11 //类的静态代码块,随着类的加载,只执行一次。

12 static{13 try{14 Class.forName("com.mysql.jdbc.Driver");15 } catch(ClassNotFoundException e) {16 e.printStackTrace();17 }18 }19 //建立链接。需要单独创建一个方法。20 //通过返回值返回链接对象。21 //链接每次用完之后就会关闭。

22 public staticConnection getConnection() {23 try{24 return DriverManager.getConnection("jdbc:mysql:///test?characterEnconding=UTF-8", "数据库账户", "密码");25 } catch(SQLException e) {26 e.printStackTrace();27 }28 return null;29 }30

31 /**增删改的通用方法32 *@paramString sql 要执行的sql33 *@paramObject[] obj 对象类型的数组 里面存放着 sql执行的占位符参数34 * Object... 可变参数35 **/

36 public static booleanexecuteUpdate(String sql,Object... args){37 PreparedStatement ps = null;38

39 try{40 ps =getConnection().prepareStatement(sql);41 for (int i = 0;i0)return true;46 } catch(SQLException e) {47 e.printStackTrace();48 }finally {

close(conn,ps,null);

}

49 return false;50 }51 }

1 //c查询的通用方法

2 public static List>executeQuery(String sql,Object... args){3 Connection conn = null;4 PreparedStatement ps = null;5 ResultSet set = null;6 try{7 conn =DBUtil.getConnection();8 ps =conn.prepareStatement(sql);9 /*有可能有参数*/

10 for (int i=0;i

14 set =ps.executeQuery();15 /*需要将所有数据都存放到 List中 每一行 用一个 map存放*/

16 List> list = new ArrayList<>();17 /*获取本次查询结果集有多少列*/

18 int count =set.getMetaData().getColumnCount();19

20 while(set.next()){21 Map map = new HashMap<>();//一行数据 用一个map 接收

22

23 for(int i=0;i

28 list.add(map);29 }30 returnlist;31 } catch(Exception e) {32 e.printStackTrace();33 }finally{34 close(conn,ps,set);35 }36 return null;37 }38

39 / /关闭的通用方法40 private static voidclose(Connection conn,PreparedStatement st,ResultSet set){41 try{42 if(set!=null){43 set.close();44 }45 if(st!=null){46 st.close();47 }48 if(conn != null){49 conn.close();50 }51 }catch(Exception e){52 e.printStackTrace();53 }54 }55 }

第四步:在dao层创建一个接口。

1 packagecom.Wuchuang.dao;2

3 importcom.Wuchuang.entiy.Student;4

5 public interfaceIStudentDAO {6 /**

7 * 添加新学生8 * insert into student (name,age,sex) values (?,?,?);9 * 两个以上的参数 全用对象传参10 *@param学生对象 里面存放当着需要添加的学生信息11 *@returnboolean 成功返回 true 失败 返回 false12 */

13 booleanadd (Student s);14

15

16 /**

17 * 根据id删除学生,所以返回值可以直接填写id的数据类型和id18 * delete from student where id = ?19 */

20 boolean delete(intid);21

22

23 /**

24 * 根据id修改学生25 * update student set name = ?,age= ? where id = ?26 */

27 booleanupdate(Student s);28 }

第五步:创建一个接口实现类。

1 packagecom.Wuchuang.dao.Impl;2

3 importcom.Wuchuang.dao.IStudentDAO;4 importcom.Wuchuang.entiy.Student;5 importcom.Wuchuang.util.DBUtil;6

7 public class StudentDAOImpl implementsIStudentDAO {8 @Override9 public booleanadd(Student s) {10 String sql = "insert into Student (name,age,sex) values (?,?,?)";11

12 returnDBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex());13 }14

15 @Override16 public boolean delete(intid) {17 String sql = "delete from Student where id = ?";18

19 returnDBUtil.executeUpdate(sql,id);20 }21

22 @Override23 public booleanupdate(Student s) {24 String sql = "update Student set name = ?,age = ?,sex = ? where id = ?";25

26 returnDBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex(),s.getId());27

28 }29 }

第六步:进行测试。

1 packagecom.Wuchuang.servlet;2

3 importcom.Wuchuang.dao.IStudentDAO;4 importcom.Wuchuang.dao.Impl.StudentDAOImpl;5 importcom.Wuchuang.entiy.Student;6 importorg.junit.Test;7

8 public classServletTest{9 @Test10 public voidtest(){11 Student s = new Student(1,"吃饭",38,"男");12

13 IStudentDAO dao = newStudentDAOImpl();14

15 dao.add(s);16 }17

18 }

2019年4月11日17:22:31

java jdbc封装_JDBC封装-Java(新手)相关推荐

  1. java jdbc 增删改封装_JAVA JDBC 常规增删改查简单封装

    JAVA JDBC 常规增删改查简单封装,可满足大多基本要求 作用: 1, 查询列表是直接返回List对象,不必再遍历: 2, 单条查询直接返回对象: 3, 执行sql仅需一个方法搞定: packag ...

  2. jdbc与java数据库编程_JDBC与JAVA数据库编程

    一.JDBC的概念 1. JDBC (Java DataBase Connectivity) Java数据库连接 a) 主要提供java数据库应用程序的API支持 2. JDBC的主要功能 a) 创建 ...

  3. Java JDBC连接Oracle,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 1. ...

  4. java jdbc 工具_JDBC 工具类

    经过上面的学习,会发现增删改查都有很多共同点,不同之处只是SQL语句和接收返回值的方式不同,那么为了使程序的复用性更好,我们通常把相同的代码提取出来.下面的代码演示一个通过提取出来的工具类进行新增操作 ...

  5. java jdbc脚本_关于java:使用MySQL和JDBC运行.sql脚本

    我开始使用MySQL和JDBC. Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnectio ...

  6. java jdbc 连接mysql数据库,Java 通过JDBC连接Mysql数据库

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  7. java rds 数据库_JDBC(java数据库连接)和阿里云RDS数据库

    这两天挖洞的时候,拿到了一个配置生产环境的源码,看一下就能看出来是配置 首先给大家看下源码: 因为我暂时还没有学过java,所以刚看到这个,就没有这个概念,只以为是配置个 首先我们来了解下JDBC:J ...

  8. Java JDBC中,MySQL字段类型到JAVA类型的转换

    转载自:https://www.cnblogs.com/waterystone/p/6226356.html 1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该 ...

  9. java jdbc mysql_java jdbc

    Java工程师必知词汇:JDBC |名词定义| Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接 ...

最新文章

  1. 用于python环境下的数据操作_数据分析(一):环境搭建,以及初步操作文件
  2. Python中使用高德API实现经纬度转地名
  3. vs2005常用的调试方法
  4. Python升级至2.7方法
  5. 返回一个一维整数数组中最大子数组的和
  6. mysql基本命令总结
  7. 5.Knockout.Js(自定义绑定)
  8. 一个小型的中文文本分类系统(项目链接文末)——《ML算法原理和实践》学习笔记
  9. python你!_你都用 Python 来做什么?
  10. davinci项目服务器无法,【工程管理】为达芬奇建一个项目管理服务器 多人协同调色...
  11. Linux 私房菜 笔记(完结)
  12. 张老师面试题讲解——交通信号灯
  13. 第一篇:零基础入门金融风控之风控指标体系清单
  14. 英语听力采用计算机化考试,高考英语复习资料及听力机考特点与应对建议
  15. 杀戮尖塔java启动_slay the spire杀戮尖塔无法启动
  16. iOS11.3 beta5专为提升苹果X速度?网友:iPhone6S的我们怎么办
  17. 利用计算图计算公积金余额
  18. 罗克韦尔AB PLC ControlLogix PLC的介绍和选型
  19. 黄灯闪烁c语言程序,模拟交通灯C程序,用定时器0,如何实现黄灯闪烁功能
  20. 远程桌面协助的计算机名是什么意思,windows远程桌面和远程协助有什么区别

热门文章

  1. noip模拟赛 都市
  2. Vijos1240 朴素的网络游戏
  3. 织梦使用if判断某个字段是否为空
  4. JQuery实现——黑客帝国代码雨效果
  5. Oracle密码中含有特殊字符时exp,imp的使用
  6. 微信小程序进度条详解 progress 自定圆形进度条
  7. 微信小程序底部弹框 showActionSheet
  8. CC3200底板测试-烧写CC3200-LAUNCHXL
  9. python+PIL+pytesser处理验证码环境搭建
  10. Android Studio 安装具体步骤(配图)