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. 1 —— js 语法回顾 —— 数据类型。流程控制。数组

    一,数据类型 字符串 . 数值 .布尔. null . undefined . 对象  ( 数组 . 函数 function(){} . object) undefined 出现的情景 :  (1)变 ...

  2. Python实战案例:这是你见过的最详细的JS加密登录某博

    0x00 抓包分析 简单的搜索之后发现,很多参数都是登陆上面这个请求返回的值,这个请求在输入完账号光标到达密码框时就会生成! 0x01 加密逻辑分析 搜索su=可以很快找到加密的位置,上图看到e.su ...

  3. Java 统计整数二进制中1的个数

    package cookie; public class CountBinary_1 { public static void main(String[] args) { System.out.pri ...

  4. php srand()和rand()

    1.rand()函数 作用:返回随机整数 用法:rand(min,max)  min和max规定随机数产生的范围,可以省略不写,不写时rand() 返回 0 到 RAND_MAX 之间的伪随机整数. ...

  5. HDU - 5586 Sum(区间增量最大)

    题意:将数组A的部分区间值按照函数f(Ai)=(1890*Ai+143)mod10007修改值,区间长度可以为0,问该操作后数组A的最大值. 分析:先求出每个元素的增量,进而求出增量和.通过b[r]- ...

  6. java: 集合collection

    collection是集合层次结构中的根接口,一些集合允许重复元素,而其他集合不允许. 有些collection是有序的,而另一些是无序的. JDK不提供此接口的任何直接实现:它提供了更具体的子接口的 ...

  7. 送票啦~ | 京东云邀您参加AI顶级盛会GTC CHINA 2019

    本年度不可错过的AI顶级盛会 GTC CHINA2019 即将于12月16–19日在苏州举行 京东云重量级技术专家将携 AI前沿热议话题亮相 京东云相关AI最新动态,也会一并为您带上 小小剧透,快来看 ...

  8. 关于github无法访问的问题(转载)

    原文链接:https://blog.csdn.net/qq_32239767/article/details/80180560 连续几天了github一直都无法访问,宿舍几台电脑我都试了,排除了自己电 ...

  9. GPLT L3-021 神坛

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

  10. GoF 23种设计模式概述

    本文的结构: 一.设计模式总览 二.创建型设计模式 Creational Patterns 三.结构型设计模式 Structural Patterns 四.行为型设计模式 Behavioral Pat ...