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. js使用new操作符创建对象

    转 在编写js代码时,我们有时会需要使用函数来模拟java中的类,并用它来产生对象,在定义了一个构造函数之后我们需要使用new操作符来调用调用函数才能得到我们想要的对象.例如: function Co ...

  2. 云时代架构阅读笔记五——Java内存模型详解(一)

    什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致 ...

  3. [洛谷Luogu]P1141 01迷宫[联通块 并查集]

    题目链接 大致题意 相邻格子不同为连通,计算每个点所在的连通块大小. 想法 我采用了并查集的做法. 开一个辅助数组记录连通块大小,每次合并的时候更新父亲节点的大小即可. 一个点先与它上面的点判定,若判 ...

  4. 143-PHP printf函数

    <?php $num=123.456; //定义一个浮点数变量 printf('以整数形式输出:%d',$num); //格式化为有符号十进制整数后输出 ?> <?php $num= ...

  5. 实验吧-隐写术-黑与白(二)(反转+五笔+Image steganography)

    反转有二:颜色反转.文件名反转 文件名这么乱,毫无规律,好奇怪,进行反转后发现是:steganography(就是隐写术的意思),这还是个图片文件,有一款工具正好叫Image steganograph ...

  6. JAVA程序中常用概念介绍

    一.关键字.引用.直接量.变量.长量概念 1.关键字 java内部定义的java语言专用的单词,这些单词具有特殊含义,开发人员在定义自己声明的名称时,应该避开这些专用的单词.这些专用的单词也就称之为j ...

  7. 二、react开发环境配置与webpack入门

    Webpack 模块打包工具(module bundler)功能: 将 CSS.图片与其他资源打包 打包之前预处理(Less.CoffeeScript.JSX.ES6 等)档案 依 entry 文件不 ...

  8. vue小练习--音乐播放器

    1 首先建一个文件夹 放几首歌曲 2 看代码 1)基本版本 <!DOCTYPE html> <html lang="zh-CN"> <head> ...

  9. tcp协议与dup协议知识总结

    在工作之余用xmind总结了一些UDP协议与TCP协议的知识点,如果有需要可以通过下方的留言,分享xmind文件和xmind软件.

  10. html特殊字符的写法

    符号 写法 (空格)   <(小于号) < >(大于号) > " " ®(已注册) ® ©(版权) © ™(商标) ™ (半方大的空白)   (全方大的空白 ...