前言

Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。JDBC是面向关系型数据库的。 在J2SE中,提供了一个称之为JDBC-ODBC桥的API。

​ --维基百科

sun公司提供的java连接数据库的规范,包括一些常见的数据库,MySQL Oracle等。

要想通过IDEA创建项目连接借助JDBC使用mysql数据库等,这里以我使用的MySQL数据库为例,

要下载好相应的jar包,这在官网中都可以找到。通过IDEA的导包,将其添加到所在的项目列表里,就可以使用JDBC。

作用

JDBC就是对于java代码来说,在应用程序和数据库之间的一个中间层 API,也就是中间商;JDBC允许操作者按照所需要的形式去访问获取数据库信息,可以进行查询,有点类似那些数据库可视化软件的部分功能,同时支持更新指令,处理其响应并返回结果。

JDBC的架构

分为了三层和两层架构;

  1. 三层架构,中间相较于两层架构,多一个应用服务层,区分层次就是为了符合”高内聚,低耦合“的思想,可以降低层与层之间的依赖,减少依赖性,开发人员可以只用关注某一层。

  2. 双层架构

    这种架构,支持直接连接数据库进行操作,这种架构,效率会高很多,因为直接访问数据库,但是有时维护成本和时间会增加,相对于三层可靠性和安全性会欠缺一些

下面讲一下一些操作步骤。

步骤

可以查阅官方文档查看,比较详细,不过是全英文的,可以翻译来看看。

  1. 注册驱动

    //这样写是由问题的,里面的Driver类有静态代码块会自动注册了很容易造成二次注册,没必要二次注册
    //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    Class.forName("com.mysql.jdbc.Driver");//里面加的是全路径
    //返回与给定字符串名称的类或接口相关联的类对象。 调用此方法相当于:
    //Class.forName(className, true, currentLoader)
    //其中currentLoader表示当前类的定义类加载器。
  2. 建立连接

    //这里我一开始的写法没有加上useSSL和时区,导致IDEA报错,这里写成这样会比较好一点
    DriverManager.getConnection("jdbc:mysql://localhost:3306/myemployees?useSSL=false&serverTimezone=Asia/Shanghai",'user','password');
    //这里使用这种格式之后,我把加载驱动程序的class.forName注释掉了,都是可以使用的,只是会出现警告
  3. 创建statement

    //填充sql语句
    PreparedStatement pre = con.prepareStatement("select * from employees where first_name = 'Lex';");
  4. 执行sql语句,获得resultSet

    //executes sql
    //这里使用了 ResultSet 的executeQuery()方法,执行查询的sql语句,并返回结果
    ResultSet rs = pre.executeQuery();
  5. 遍历得到所需的结果

    //和遍历文件的输出输入流一样
    //可以使用同样的框架
    //@param getString方法中的参数就是columnLabel(下面我所使用的salary字段)使用SQL AS子句指定的列的标签。如果未指定SQL AS子句,则标签为列的名称
    while (rs.next()){
    System.out.println("输出:"+rs.getString("salary"));//因此返回的是查询salary的内容
    }
  6. 关闭,释放资源

    //Statement stmt = null;
    //ResultSet rs = null;
    //下面是官方文档中推荐的释放资源的写法
    if (rs != null) {
    try {
    rs.close();
    } catch (SQLException sqlEx) { } // ignore rs = null;
    } if (stmt != null) {
    try {
    stmt.close();
    } catch (SQLException sqlEx) { } // ignore stmt = null;
  • 完整代码

package mysql;

import java.sql.*;

/**
* @Author: yhy
* @Date: 2020/2/27
* @Time: 20:53
*/
public class ConFirst {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// register
Class.forName("com.mysql.cj.jdbc.Driver");
// DriverManager.registerDriver(new com.mysql.jdbc.Driver()); // connect message
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myemployees?useSSL=false&serverTimezone=Asia/Shanghai","user","password");
// sql statement
PreparedStatement pre = con.prepareStatement("select * from employees where first_name = 'Lex';");
// accept the result
ResultSet rs = pre.executeQuery();
while (rs.next()){
System.out.println("输出:"+rs.getString("salary"));
}
// close the resource
//应该按照官方那样写,我这里偷懒没写详细
rs.close();
con.close();
} }

JDBC常见的关键字解释

  • DriverManager: 这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。

  • Driver: 此接口处理与数据库服务器通信。很少直接驱动程序对象.

    //        每个驱动程序类必须实现的接口。
    // Java SQL框架允许多个数据库驱动程序。
    // 每个驱动程序都应该提供一个实现Driver接口的类。
    // DriverManager将尝试加载尽可能多的驱动程序,然后对于任何给定的连接请求,它会依次要求每个驱动程序 尝试连接到目标URL。
    // 强烈建议每个Driver类应该是小型且独立的,以便可以加载和查询Driver类,而不需要大量的支持代码。
  • Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。

  • Statement:用于执行静态SQL语句并返回其生成的结果的对象。创建执行SQL语句的连接中间人。

  • SQLException: 这个类处理发生在一个数据库应用程序的任何错误,提供有关数据库访问错误或其他错误的信息的异常,而且每一个都提供了信息,包括了描述错误的字符串

  • ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet对象保持一个光标指向其当前的数据行。最初,光标位于第一行之前。 next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false,因此可以在while循环中使用循环来遍历结果集。使用之后一般选择close。

浅谈了解JDBC的更多相关文章

  1. 浅谈sharding jdbc

    定位为轻量级Java框架,在Java的JDBC层提供的额外服务. 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架. ...

  2. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  3. !! 浅谈Java学习方法和后期面试技巧

    浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...

  4. Hibernate更新部分字段浅谈

    update语句是在Hibernate的Configuration的时候生成的,不能动态改变.为什么update的时候所有的属性都一起update,而不是只更新改变字段,其实这是一个比较值得探讨的问题 ...

  5. [转]浅谈Hive vs. HBase 区别在哪里

    浅谈Hive vs. HBase 区别在哪里 导读:Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,Apache HBase是运行于HDFS顶层的NoSQL(=No ...

  6. 阿里P7浅谈SpringMVC

    一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...

  7. 【SSH学习笔记】浅谈SSH框架

    说在前面 本学期我们有一门课叫做Java EE,由陈老师所授,主要讲的就是Java EE 中的SSH框架. 由于陈老师授课风格以及自己的原因导致学了整整一学期不知道在讲什么,所以才有了自己重新学习总结 ...

  8. 浅谈springboot自动配置原理

    前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...

  9. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

随机推荐

  1. PyTorch基础——机器翻译的神经网络实现

    一.介绍 内容 "基于神经网络的机器翻译"出现了"编码器+解码器+注意力"的构架,让机器翻译的准确度达到了一个新的高度.所以本次主题就是"基于深度神经 ...

  2. selenium自学进度-2014.12.3

    今天把小米系列的视频看到了倒数第二课 他讲得很好,只是我现在是看第一遍,回头还需要照着视频多练练. 成长的道路问题艰辛的,学习的道路问题孤独的,希望自己能够坚持下去. 不要让今天的努力白费,不能让未来 ...

  3. C++ malloc函数

    malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内 ...

  4. Linux c 操作MySQL

    #include <mysql/mysql.h>#include <stdio.h>#include <stdlib.h>int main() { MYSQL *c ...

  5. linux操作提示:“Can't open file for writing”或“operation not permitted”的解决办法

    在linux上使用vi命令修改一个文件内容的时候,发现无法保存,每次写完使用":q!"命令可以正常退出但是使用":wq!"命令保存文件并退出时出现一下信息提示: ...

  6. poj-3665 iCow(暴力吧)

    http://poj.org/problem?id=3665 题目描述 Fatigued by the endless toils of farming, Farmer John has decide ...

  7. 管理Exchange Online用户介绍(一)

    一.管理收件人 1.在“Office 365管理中心”主页,依次选择用户->添加用户 2.输入相关信息,其中包括名称.用户名.电子邮件地址等信息. 二.Exchange Online对用户邮箱的 ...

  8. [LC] 443. String Compression

    Given an array of characters, compress it in-place. The length after compression must always be smal ...

  9. 吴裕雄--天生自然python学习笔记:爬取我国 1990 年到 2017年 GDP 数据并绘图显示

    绘制图形所需的数据源通常是不固定的,比如,有时我们会需要从网页抓取, 也可能需从文件或数据库中获取. 利用抓取网页数据技术,把我国 1990 年到 2016 年的 GDP 数据抓取出来 ,再利用 Ma ...

  10. Fire-Fighting Hero(多源最短路和单源最短路)

    题:https://nanti.jisuanke.com/t/41349 分析:对于hero来说,走单源最短路,然后遍历dis数组中的最大值即可找到,对于消防员来说,走多源最短路,只需要建个超级起点连 ...