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. SHELL的判断括号区别

    在使用if语句时,经常会使用().(()).[].[[]].{}等括号,如下为几种括号简单区别对比: ( ) 用于多个命令组.命令替换.初始化数组: (( )) 整数扩展.运算符.重定义变量值,算术运 ...

  2. maven工程根项目运行ok但是子项目就报错的解决办法

    正常启动没错 项目出现问题 maven工程根项目运行ok但是子项目就报错 报错信息是xxxx没有创建 解决办法 原来是子项目的依赖少了  没有配置1.8  所以会出现莫明其妙的bug

  3. js中的call

    //例1 <script> window.color = 'red'; document.color = 'yellow'; var s1 = {color: 'blue' }; func ...

  4. 多方论战!市场到底看重VR哪些特质

    VR即Virtual Reality的缩写,中文译为"虚拟现实".近年来,VR的概念不断升温,三星.谷歌.微软.索尼.HTC等互联网巨头纷纷杀入VR市场,甚至催生出许多商业神话.  ...

  5. rpm方式安装MySQL后在命令行登录报错:ERROR 1045 (28000): Unknown error 1045

    1.通过https://mirrors.tuna.tsinghua.edu.cn镜像源安装了MySQL5.7.22 rpm -ivh --force --nodeps https://mirrors. ...

  6. GCD实现多个定时器,完美避过NSTimer的三大缺陷(RunLoop、Thread、Leaks)

    定时器在我们每个人做的iOS项目里面必不可少,如登录页面倒计时.支付期限倒计时等等,一般来说使用NSTimer创建定时器: + (NSTimer *)timerWithTimeInterval:(NS ...

  7. Hexo搭建个人博客(一)— 前期准备

    最近几个月自学python的过程中,搜索爬虫资料的时候关注了xlzd的博客,为我开启了一片新世界,之后慢慢收藏了各方高人的博客.搭建一个自己博客的萌芽也悄然种下,也许是命运使然,在逛知乎的时候偶然间看 ...

  8. python库常用函数学习

    os.path #返回标准化的绝对路径,基本等同于normpath() os.path.abspath(path) #返回文件名 os.path.basename(path) #返回目录名 os.pa ...

  9. Angular 从入坑到挖坑 - 表单控件概览

    一.Overview angular 入坑记录的笔记第三篇,介绍 angular 中表单控件的相关概念,了解如何在 angular 中创建一个表单,以及如何针对表单控件进行数据校验. 对应官方文档地址 ...

  10. Webpack 核心开发者 Sean Larkin 盛赞 Vue

    dev.io 近日邀请了 Webpack 核心开发者 Sean Larkin 回答开发者提问,其中几个问提比较有意思,和掘金的小伙伴们分享一下. 先上点前菜: 有一个开发者问 Sean 如何成为一个热 ...