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(一)的更多相关文章

  1. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  2. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  3. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  4. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  5. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  6. JDBC简介

    jdbc连接数据库的四个对象 DriverManager  驱动类   DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...

  7. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  8. FineReport如何用JDBC连接阿里云ADS数据库

    在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...

  9. JDBC基础

    今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...

  10. Spring学习记录(十四)---JDBC基本操作

    先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...

随机推荐

  1. 编写程序,实现在带头结点的单链表L中删除一个最小值节点的算法。

    算法复杂度0(n) #!/usr/bin/env python3 class LNode(object): def __init__(self, elem, next_=None): self.ele ...

  2. mjpg-streamer视频服务器移植

    相关软件下载地址:http://pan.baidu.com/s/16yo8Y JPEG库的移植 对于内核linux-2.6.35,不能再使用servfox,如果要使用的需要修改大量的代码.在此选用新的 ...

  3. MySQL每日执行

    drop event if exists upload_deadline; DELIMITER $$ create event upload_deadline day starts timestamp ...

  4. 131-PHP子类可以访问父类public修饰的类成员

    <?php class father{ //定义father类 public function cook(){ return '烹饪'; } } class son extends father ...

  5. UVALive 4287 SCC-Tarjan 加边变成强连通分量

    还是强连通分量的题目,但是这个题目不同的在于,问你最少要添加多少条有向边,使得整个图变成一个强连通分量 然后结论是,找到那些入度为0的点的数目 和 出度为0的点的数目,取其最大值即可,怎么证明嘛... ...

  6. Docker 容器(container)

    版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...

  7. Linux重要命令练习之bc

  8. arduino双机通信 (解决引脚不够用)

    作用 实现将一个 arduino 中的多个 String 类型变量准确地传到另一个 arduino 中对应的多个 String 类型变量 中. 接线图 注意 TX 接另一个arduino的 RX !可 ...

  9. CNN核心概念理解

    卷积神经网络 (Convolutional Neural Networks,简称CNN),是一种经典的神经网络算法.由于在图像识别领域取得的良好效果,随着人工智能的火热,它也受到越来越多的关注.CNN ...

  10. Airflow 使用 Celery 时,如何添加 Celery 配置

    背景 前段时间我选用了 Airflow 对 wms 进行数据归档,在运行一段时间后,经常发现会报以下错误: [-- ::,: WARNING/ForkPoolWorker-] Failed opera ...