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亿 ...
随机推荐
- 如何有效地报告Bug
英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...
- function_exists (),method_exists()与is_callable()的区别
is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true.如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方 ...
- Bootstrap插件及其应用方法网址
全局CCS样式 https://v3.bootcss.com/css/#type-lists 组件 https://v3.bootcss.com/components/#pagination Boot ...
- 文本快速分类利器fasttext使用心得(踩坑之路)
fasttext是文本分类的一大利器,优点:快,嗷嗷快:缺点:暂未发现.但是我在使用其做文本分类时候还是遇到了挺多坑,今天先总结一个: 网上有人说设置训练参数的时候,ngrams设置大于2可以提高模型 ...
- Android studio常用快捷键与设置
1.格式化代码: 命令 快捷键 将代码合并成一行 Ctrl + Shift + J 格式化 Ctrl+Alt+L 2.API函数参数提示:双击选中所要提示的函数,再按F2即可显示函数的使用方法. 3. ...
- Android Pay正式启用 支付宝们还好吗
Pay正式启用 支付宝们还好吗" title="Android Pay正式启用 支付宝们还好吗"> 苹果发布会上能够真正让人眼前一亮的产品并不多,但对于" ...
- 点击穿透bug · Jaywii
微信点击穿透Bug 问题描述:在移动端为了去除点击延迟引入了fast-click,然而在房贷计算器的开发中遇到了这样一个bug,用户点击了select之后,微信在弹出选择器之后会瞬间因为约300ms的 ...
- 一条SQL在内存结构与后台进程工作机制
oracle服务器由数据库以及实例组成,数据库由数据文件,控制文件等物理文件组成,实例是由内存结构+后台进程组成,实例又可以看做连接数据库的方式,在我看来就好比一家公司,实例就是一个决策的办公室,大大 ...
- 达拉草201771010105《面向对象程序设计(java)》第十六周学习总结
达拉草201771010105<面向对象程序设计(java)>第十六周学习总结 第一部分:理论知识 1.程序与进程的概念: (1)程序是一段静态的代码,它是应用程序执行的蓝 本. (2)进 ...
- windows 10 右键菜单注册表位置
1. 查找 1.1. 打开注册表 # 1. 使用快捷键打开 “运行” win + r # 2. 在 “运行” 中输入 regedit # 3. 回车 1.2. 点击 查找 # 1. 方法 1 : 点击 ...