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、调用方法。


实例:


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

    


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

    

 package com.Wuchuang.entiy;

 public class Student {

     private int id;
private String name;
private int age;
private String sex; public Student() {
} public Student(int id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} @Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}

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

    

 package com.Wuchuang.util;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class DBUtil {
//注册驱动,驱动只需要加载一次即可
//所以写在静态代码段中(static)
//类的静态代码块,随着类的加载,只执行一次。
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//建立链接。需要单独创建一个方法。
//通过返回值返回链接对象。
//链接每次用完之后就会关闭。
public static Connection getConnection() {
try {
return DriverManager.getConnection("jdbc:mysql:///test?characterEnconding=UTF-8", "数据库账户", "密码");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} /** 增删改的通用方法
* @param String sql 要执行的sql
* @param Object[] obj 对象类型的数组 里面存放着 sql执行的占位符参数
* Object... 可变参数
* */
public static boolean executeUpdate(String sql,Object... args){
PreparedStatement ps = null; try {
ps = getConnection().prepareStatement(sql);
for (int i = 0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
int i = ps.executeUpdate();
if (i>0)return true;
} catch (SQLException e) {
e.printStackTrace();
}finally {         close(conn,ps,null);
      }
 return false; 

  } 

 }
      // c查询的通用方法
public static List<Map<String,Object>> executeQuery(String sql,Object... args){
Connection conn = null;
PreparedStatement ps = null;
ResultSet set = null;
try {
conn = DBUtil.getConnection();
ps = conn.prepareStatement(sql);
/* 有可能有参数 */
for (int i=0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
/*执行*/
set = ps.executeQuery();
/*需要将所有数据都存放到 List中 每一行 用一个 map存放*/
List<Map<String,Object>> list = new ArrayList<>();
/*获取本次查询结果集有多少列*/
int count = set.getMetaData().getColumnCount(); while(set.next()){
Map<String, Object> map = new HashMap<>();//一行数据 用一个map 接收 for(int i=0;i<count;i++){
String name = set.getMetaData().getColumnLabel(i+1);
map.put(name,set.getObject(name));
}
/*将每行的map存放到 List中*/
list.add(map);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}finally {
close(conn,ps,set);
}
return null;
} / /关闭的通用方法
private static void close(Connection conn,PreparedStatement st,ResultSet set){
try {
if(set!=null){
set.close();
}
if(st!=null){
st.close();
}
if(conn != null){
conn.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}

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

 package com.Wuchuang.dao;

 import com.Wuchuang.entiy.Student;

 public interface IStudentDAO {
/**
* 添加新学生
* insert into student (name,age,sex) values (?,?,?);
* 两个以上的参数 全用对象传参
* @param 学生对象 里面存放当着需要添加的学生信息
* @return boolean 成功返回 true 失败 返回 false
*/
boolean add (Student s); /**
* 根据id删除学生,所以返回值可以直接填写id的数据类型和id
* delete from student where id = ?
*/
boolean delete(int id); /**
* 根据id修改学生
* update student set name = ?,age= ? where id = ?
*/
boolean update(Student s);
}

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

 package com.Wuchuang.dao.Impl;

 import com.Wuchuang.dao.IStudentDAO;
import com.Wuchuang.entiy.Student;
import com.Wuchuang.util.DBUtil; public class StudentDAOImpl implements IStudentDAO {
@Override
public boolean add(Student s) {
String sql = "insert into Student (name,age,sex) values (?,?,?)"; return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex());
} @Override
public boolean delete(int id) {
String sql = "delete from Student where id = ?"; return DBUtil.executeUpdate(sql,id);
} @Override
public boolean update(Student s) {
String sql = "update Student set name = ?,age = ?,sex = ? where id = ?"; return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex(),s.getId()); }
}

第六步:进行测试。

 package com.Wuchuang.servlet;

 import com.Wuchuang.dao.IStudentDAO;
import com.Wuchuang.dao.Impl.StudentDAOImpl;
import com.Wuchuang.entiy.Student;
import org.junit.Test; public class ServletTest{
@Test
public void test(){
Student s = new Student(1,"吃饭",38,"男"); IStudentDAO dao = new StudentDAOImpl(); dao.add(s);
} }

2019年4月11日17:22:31

JDBC封装-Java(新手)的更多相关文章

  1. 给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)

    J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面 ...

  2. JDBC数据库连接JAVA和一些基本语句

    连接JDBC       1)JDBC简介         - JDBC就是Java中连接数据库方式         - 我们可以通过JDBC来执行SQL语句.       2)获取数据库连接     ...

  3. J2EE学习从菜鸟变大鸟之五 JDBC(Java Data Base Connectivity)

    JDBC刚开始学习这个的时候看到了,以为是ODBC呢,很是相似啊,总的来说还是基本上一类的东东,但是还有一些细微的区别,下面和大家一起分享学习. JDBC(Java Data Base Connect ...

  4. JDBC(Java Data Base Connectivity,java数据库连接)

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

  5. 优化JDBC封装

    可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...

  6. jdbc封装代码

    jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...

  7. CDH搭建Hadoop分布式服务器集群(java新手小白)

    1首先对于一个java还白的小白,先理解CDH与Hadoop的关系 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发行第三方发行版Hadoop,考虑到Hadoop ...

  8. JDBC在Java Web中的应用

    JDBC在Java Web中的应用 制作人:全心全意 在Java Web开发中,JDBC的应用十分广泛.通常情况下,Web程序操作数据库都是通过JDBC实现,即使目前数据库方面的开源框架层出不穷,但其 ...

  9. 史上最全的 Java 新手问题汇总

    史上最全的 Java 新手问题汇总   Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...

随机推荐

  1. html和jsp页面中把文本框禁用,只能读不能写的方法

    方法常用有三种: 第一种,使用   onfocus="this.blur()" <input name="deptno" type="text& ...

  2. 关于JavaScript中的typeof与instanceof

    JavaScript中typeof和instanceof可以用来判断一个数据的类型,什么时候选择使用typeof?什么时候选择使用instanceof? typeof运算符 typeof运算符返回值有 ...

  3. OCR:慧眼读世界

    作者:微软亚洲研究院首席研究员 霍强 把手机摄像头对准菜单上的法语菜名,屏幕上实时显示出翻译好的中文菜名:将全世界图书馆的藏书转化为电子书:街景车游走于大街小巷,拍摄街景的同时也从街景图像中自动提取文 ...

  4. 对Java tutorial-examples中hello2核心代码分析

    1.在hello2中有两个.java源文件分别是GreetingServlet.Java和ResponseServlet.jva文件主要对以下核心代码做主要分析. String username = ...

  5. nginx 代理第三方邮件站点

    需求:公司业务服务器使用的是阿里云,要求内网(仅有内网IP)所有流量走网关服务器(有外网IP及内网IP),内网服务器需要调用一个公网上的第三方邮件站点.在参考了https://www.linuxba. ...

  6. mac下配置开发环境

    常用命令 显示隐藏文件 1 defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 关闭隐藏文 ...

  7. QQ公众号出炉 同门相争意欲何为

    同门相争意欲何为"> 当初腾讯大张旗鼓地推出微信时,很多业内人士都认为其与QQ在功能.用户等方面多有重叠,肯定会阻碍QQ的发展和微信的成长.没想到,二者避重就轻地在不同的侧重点发展,反 ...

  8. 查漏补缺:OSI七层模型和TCP/IP模型

    应用层协议:Telnet.FTP.e-mail等 传输层协议:TCP.UDP.STCP等 网络层协议:IP.ICMP.IGMP等 链路层协议:设备驱动及接口卡

  9. Ubuntu 16.04 PXE+kickstart部署系统

    #PXE+TFTP+Kickstart 自动部署服务器系统系统Ubuntu16.04apt-get install isc-dhcp-servervim /etc/default/isc-dhcp-s ...

  10. 生鲜电商的两极战:巨头VS地头

    ​ ​ "九月蟹黄满,十月蟹肉香",螃蟹年年相似,总是美味无边,但购买渠道却随着互联网普及而变得愈发多样起来.此前,大闸蟹礼券风靡就是最佳代表之一.虽然也引发诸多问题,但消费者也越 ...