JDBC封装-Java(新手)
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(新手)的更多相关文章
- 给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)
J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面 ...
- JDBC数据库连接JAVA和一些基本语句
连接JDBC 1)JDBC简介 - JDBC就是Java中连接数据库方式 - 我们可以通过JDBC来执行SQL语句. 2)获取数据库连接 ...
- J2EE学习从菜鸟变大鸟之五 JDBC(Java Data Base Connectivity)
JDBC刚开始学习这个的时候看到了,以为是ODBC呢,很是相似啊,总的来说还是基本上一类的东东,但是还有一些细微的区别,下面和大家一起分享学习. JDBC(Java Data Base Connect ...
- JDBC(Java Data Base Connectivity,java数据库连接)
JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...
- 优化JDBC封装
可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...
- jdbc封装代码
jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...
- CDH搭建Hadoop分布式服务器集群(java新手小白)
1首先对于一个java还白的小白,先理解CDH与Hadoop的关系 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发行第三方发行版Hadoop,考虑到Hadoop ...
- JDBC在Java Web中的应用
JDBC在Java Web中的应用 制作人:全心全意 在Java Web开发中,JDBC的应用十分广泛.通常情况下,Web程序操作数据库都是通过JDBC实现,即使目前数据库方面的开源框架层出不穷,但其 ...
- 史上最全的 Java 新手问题汇总
史上最全的 Java 新手问题汇总 Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...
随机推荐
- html和jsp页面中把文本框禁用,只能读不能写的方法
方法常用有三种: 第一种,使用 onfocus="this.blur()" <input name="deptno" type="text& ...
- 关于JavaScript中的typeof与instanceof
JavaScript中typeof和instanceof可以用来判断一个数据的类型,什么时候选择使用typeof?什么时候选择使用instanceof? typeof运算符 typeof运算符返回值有 ...
- OCR:慧眼读世界
作者:微软亚洲研究院首席研究员 霍强 把手机摄像头对准菜单上的法语菜名,屏幕上实时显示出翻译好的中文菜名:将全世界图书馆的藏书转化为电子书:街景车游走于大街小巷,拍摄街景的同时也从街景图像中自动提取文 ...
- 对Java tutorial-examples中hello2核心代码分析
1.在hello2中有两个.java源文件分别是GreetingServlet.Java和ResponseServlet.jva文件主要对以下核心代码做主要分析. String username = ...
- nginx 代理第三方邮件站点
需求:公司业务服务器使用的是阿里云,要求内网(仅有内网IP)所有流量走网关服务器(有外网IP及内网IP),内网服务器需要调用一个公网上的第三方邮件站点.在参考了https://www.linuxba. ...
- mac下配置开发环境
常用命令 显示隐藏文件 1 defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 关闭隐藏文 ...
- QQ公众号出炉 同门相争意欲何为
同门相争意欲何为"> 当初腾讯大张旗鼓地推出微信时,很多业内人士都认为其与QQ在功能.用户等方面多有重叠,肯定会阻碍QQ的发展和微信的成长.没想到,二者避重就轻地在不同的侧重点发展,反 ...
- 查漏补缺:OSI七层模型和TCP/IP模型
应用层协议:Telnet.FTP.e-mail等 传输层协议:TCP.UDP.STCP等 网络层协议:IP.ICMP.IGMP等 链路层协议:设备驱动及接口卡
- Ubuntu 16.04 PXE+kickstart部署系统
#PXE+TFTP+Kickstart 自动部署服务器系统系统Ubuntu16.04apt-get install isc-dhcp-servervim /etc/default/isc-dhcp-s ...
- 生鲜电商的两极战:巨头VS地头
"九月蟹黄满,十月蟹肉香",螃蟹年年相似,总是美味无边,但购买渠道却随着互联网普及而变得愈发多样起来.此前,大闸蟹礼券风靡就是最佳代表之一.虽然也引发诸多问题,但消费者也越 ...