JDBC(一)
1. JDBC介绍
JDBC(Java DataBase Connectivity),即Java数据库的连接。JDBC是一种用于执行SQL语句(DML,DDL,DQL)的Java API,可以为多种关系数据库(oracle,mysql,sqlserver)提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
Java 通过JDBC访问数据库,数据库厂家有很多,如Mysql、Oracle、SqlServer等,而JDBC提供了操作这些数据库的统一的接口、基准,让各大厂商去实现这组规范。各大数据库厂商只需要提供对应的JDBC的jar包,使java代码通过不同厂商实现的jar包访问对应的数据库。

2. JDBC完成CRUD规范步骤
2.1.规范DAO层的实现
DAO层:涉及到开发中的三层架构与MVC层级结构。DAO层叫数据访问层,全称data access object,属于一种比较底层、比较基础的操作,具体作用于某个表、某个实体的增删改查。

DAO层的创建规范:
这里包括界面层传入数据封装成为的域对象——Domain类对象。

2.2. DAO层具体实现
具体代码如下:
DAO层:
接口:
public interface IStudentDao {
public void insert(Student student);
public void update(Student student);
public void delete(Integer id);
public Student queryOne(Integer id);
public List<Student> queryAll();
}
实现类Impl:
package cn.yif.dao.impl; import cn.yif.domain.Student;
import cn.yif.dao.IStudentDao;
import cn.yif.utils.JDBCUtil; import java.sql.*;
import java.util.ArrayList;
import java.util.List; /**
* @author Administrator
* @create 2019-09-13-20:33
*/
public class StudentDaoImpl implements IStudentDao {
@Override
public void insert(Student student) {
Connection conn = null;
Statement statement = null;
try {
//①加载(注册)驱动,这部分硬编码可以写也可以不写,jdbc4.0版本自带了
//Class.forName("com.mysql.jdbc.Driver");
//②获取连接
//conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin");
conn = JDBCUtil.getInstance().getConnection();
//③获取语句对象:用来执行SQL语句
statement = conn.createStatement();
//④执行SQL语句
String insertSql = "insert into jdbcdemo01 (name, age) values ('"+student.getName()+"', "+student.getAge()+")";
statement.execute(insertSql);
}catch (Exception ex){
ex.printStackTrace();
}finally {
//⑤释放资源
JDBCUtil.getInstance().close(null, statement, conn);
}
} @Override
public void update(Student student) {
Connection conn = null;
Statement statement = null;
try {
//①加载(注册)驱动
//Class.forName("com.mysql.jdbc.Driver");
//②获取连接
//conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin");
conn = JDBCUtil.getInstance().getConnection();
//③获取语句对象:用来执行SQL语句
statement = conn.createStatement();
//④执行SQL语句
String updateSql = "update jdbcdemo01 set name = '"+student.getName()+"', age = "+student.getAge()+" where id = "+student.getId()+"";
statement.execute(updateSql);
}catch (Exception ex){
ex.printStackTrace();
}finally {
//⑤释放资源
JDBCUtil.getInstance().close(null, statement, conn);
}
} @Override
public void delete(Integer id) {
Connection conn = null;
Statement statement = null;
try {
//①加载(注册)驱动
//Class.forName("com.mysql.jdbc.Driver");
//②获取连接
//conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin");
conn = JDBCUtil.getInstance().getConnection();
//③获取语句对象:用来执行SQL语句
statement = conn.createStatement();
//④执行SQL语句
String deleteSql = "delete from jdbcdemo01 where id = "+ id +"";
statement.execute(deleteSql);
}catch (Exception ex){
ex.printStackTrace();
}finally {
//⑤释放资源
JDBCUtil.getInstance().close(null, statement, conn);
}
} @Override
public Student queryOne(Integer id) {
Connection conn = null;
Statement statement = null;
ResultSet resultSet = null;
Student student = null;
try {
//①加载(注册)驱动
//Class.forName("com.mysql.jdbc.Driver");
//②获取连接
//conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin");
conn = JDBCUtil.getInstance().getConnection();
//③获取语句对象:用来执行SQL语句
statement = conn.createStatement();
//④执行SQL语句
String queryOneSql = "select * from jdbcdemo01 where id = "+ id +"";
resultSet = statement.executeQuery(queryOneSql);
if(resultSet.next())
{
student = new Student();
student.setId(resultSet.getInt("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
}
}catch (Exception ex){ }finally {
//⑤释放资源
JDBCUtil.getInstance().close(resultSet, statement, conn);
}
return student;
} @Override
public List<Student> queryAll() {
Connection conn = null;
Statement statement = null;
ResultSet resultSet = null;
Student student = null;
List<Student> list = new ArrayList<Student>();
try {
//①加载(注册)驱动
//Class.forName("com.mysql.jdbc.Driver");
//②获取连接
//conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest01", "root", "admin");
conn = JDBCUtil.getInstance().getConnection();
//③获取语句对象:用来执行SQL语句
statement = conn.createStatement();
//④执行SQL语句
String queryAllSql = "select * from jdbcdemo01";
resultSet = statement.executeQuery(queryAllSql);
while (resultSet.next())
{
student = new Student();
student.setId(resultSet.getInt("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
list.add(student);
}
}catch (Exception ex){
ex.printStackTrace();
}finally {
//⑤释放资源
JDBCUtil.getInstance().close(resultSet, statement, conn);
}
return list;
}
}
Domain层:
package cn.yif.domain; /**
* @author Administrator
* @create 2019-09-13-20:23
*/
public class Student {
//ID表示编号
private Integer id; //name表示名字
private String name; //age表示年龄
private Integer age; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Student() {
} public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
工具类JDBCUtil实现:
package cn.yif.utils; import java.io.IOException;
import java.sql.*;
import java.util.Properties; /**
* @author Administrator
* @create 2019-09-13-21:21
*/
public class JDBCUtil {
//使用静态static类构造单例模式
private JDBCUtil(){ }
//在静态代码块中创建instance的实例,这里使用static静态变量来保存
private static JDBCUtil instance = null;
//每次都要加载驱动,这里定义一个Properties,把资源文件里面的内容读到Properties里面
private static Properties properties = null;
//JDBCUtil类加载的时候,就加载注册驱动
static {
properties = new Properties();
try {
//当前线程类加载器加载获取properties文件
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"));
try {
Class.forName(properties.getProperty("driverClassName"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} instance = new JDBCUtil();
} public static JDBCUtil getInstance(){
return instance;
} //抽取获取连接Connection的方法
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("username"), properties.getProperty("password"));
} //抽取JDBC关闭资源的close方法
public void close(ResultSet resultSet, Statement statement, Connection conn){
try {
if(resultSet != null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(statement != null){
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
JDBC资源配置文件:
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbctest01
username = root
password = admin
或GitHub:https://github.com/devyf/JavaWorkSpace/tree/master/JDBC_0913_01
JDBC(一)的更多相关文章
- Java数据库连接技术——JDBC
大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- JDBC增加删除修改
一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...
- JDBC简介
jdbc连接数据库的四个对象 DriverManager 驱动类 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- FineReport如何用JDBC连接阿里云ADS数据库
在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...
- JDBC基础
今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...
- Spring学习记录(十四)---JDBC基本操作
先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...
随机推荐
- 洛谷[Luogu] 普及村总结
总结 简单的模拟 交叉模拟 排序 排序EX
- 022-PHP数组排序asort
<?php // 构造一个数组变量 $users = array("bob" => "Yobert", "steve" => ...
- 《新标准C++程序设计》3.6-3.7(C++学习笔记9)
一.成员对象和封闭类 (1)定义 一个类的成员变量如果是另一个类的对象,就称之为“成员对象”. 包含成员对象的类叫封闭类. (2)封闭类构造函数的初始化列表 在构造函数中添加初始化列表的写法: 类名: ...
- 2. FTP 服务器安装
vsftp 安装(linux) Linux : 安装,创建虚拟用户,配置,防火墙设置 1. 安装 执行yum -y install vsftpd 注意: (1) 是否使用sudo权限执行请根据您具体环 ...
- servlet 之 HttpServlet抽象类详解
Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ...
- msf中arp_sweep使用报错:usbmon1:ERROR while getting interface flags:no such device
在许多的工具使用中,会出现很多的错误,要养成先思考再去寻找帮助的习惯 在用use命令使用arp_sweep模块的时候爆出错误:usbmon1:ERROR while getting interface ...
- 5分钟搞懂:session与cookie
http是无状态协议 无状态协议的意思是服务端与客户端不会记录任何一次通信的信息.诺兰有一部电影<记忆碎片>,说的是一个有"短期记忆丧失症"的人根据自己支离破碎的记忆来 ...
- ESP32-DOWDQ6蓝牙&Wifi 两个可单独控制的 CPU 内核
乐鑫(Espressif Systems)研发设计IoT业内集成度最高.性能最稳定.功耗最低的无线系统级芯片. ESP32-D0WDQ6集成无线2.4 GHz Wi-Fi和蓝牙双模的单芯片方案,具有两 ...
- Python pip换源
前言 哈喽呀,小伙伴们,晚上好呀,今天要给大家带来点什么呐,我们就来说说python的pip换源吧,这个换源,相对来说,还是比较重要的,能少生好几次气的,哈哈哈 为什么要换源 我们搞python的,肯 ...
- python复习——字符串
1.字符串:用双引号括起的内容 2.title()——首字母大写:print(变量名.title()) upper()——全部大写:print(变量名.upper()) lower()——全部小写:p ...