jdbc详解:1、创建数据库connection连接
为什么80%的码农都做不了架构师?>>>
新手上路,请多多包涵,文章的不足欢迎吐槽。本文章以mysql为例
相信很多人都会使用jdbc创建数据连接。
static String driverName = "com.mysql.jdbc.Driver";static String url = "jdbc:mysql://127.0.0.1:3306/mysql";static String username = "root";static String password = "";@Testpublic void getConnection1() {try {// 1、加载驱动Class.forName(driverName);// 2、获取connectionConnection conn = DriverManager.getConnection(url,username,password);System.out.println(conn);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}
代码可以说是非常简单,但是仔细想一下,发现会有2两疑问:
Class.forName(driverName)这样加载去驱动,又没有创建进行赋值给某个变量,DriverManager是如何使用该驱动来创建连接的?
如果换成别的数据库,只需要把Mysql的驱动换成别的数据库驱动就可以了,其它的代码不用改,这是怎么做到的?
下面进行解答?
疑问1:
Class.forName(className)这个方法是会执行className这个类的静态代码块的。在我们执行Class.forName("com.mysql.jdbc.Driver")的时候,com.mysql.jdbc.Driver这个类的静态代码块会被执行,然后向DriverManager注册驱动
下面是com.mysql.jdbc.Driver的源码
public class Driver extends NonRegisteringDriver implements java.sql.Driver {//// Register ourselves with the DriverManager//static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}其它省略
}
疑问2:
这个很简单,定义驱动的接口就可以了,然后交由DriverManager驱动管理器进行管理。jdbc只是定义了java数据库连接的标准,具体的实现是各个数据库厂商实现的。
java.sql.Driver源码
public interface Driver {// 要把 username、password等信息put到Properties里面Connection connect(String url, java.util.Properties info)throws SQLException;boolean acceptsURL(String url) throws SQLException;DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info)throws SQLException;int getMajorVersion();int getMinorVersion();boolean jdbcCompliant();//------------------------- JDBC 4.1 -----------------------------------public Logger getParentLogger() throws SQLFeatureNotSupportedException;
}
在调用DriverManager.getConnection()的时候,DriverManager其实是使用厂商提供的驱动包内java.sql.Driver的实现类来获取connection的,如果mysql就是使用com.mysql.jdbc.Driver内connect()方法进行连接数据库获取connection。
如果我们不是用DriverManager,那应该怎样获取connection呢??
很简单直接调用java.sql.Driver实现类的connect()方法就可以了。
@Testpublic void getConnnection2() {try {// 通过反射创建驱动对象Driver driver = (Driver) Class.forName(driverName).newInstance();// 你也可以这样写,但是这样耦合太大了
// com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();// 包装连接信息Properties info = new Properties();info.put("user", username);info.put("password", password);// 获取连接Connection conn = driver.connect(url, info);System.out.println(conn);} catch (Exception e) {e.printStackTrace();}}
转载于:https://my.oschina.net/hgp/blog/1358511
jdbc详解:1、创建数据库connection连接相关推荐
- Oracle分区详解和创建,数据库优化-Oracle表分区的创建和分类
Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降, ...
- 数据库:JDBC详解
1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- JAVA JDBC详解
一.相关概念 什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一 ...
- 详解Ubuntu10.10下Qt连接Mysql数据库
转载自:http://mobile.51cto.com/symbian-273262.htm 详解Ubuntu10.10下Qt连接Mysql数据库是本文要介绍的内容,很详细的步骤,我们先来看内容. 第 ...
- 详解:MySQL数据库的权限管理和运维实操
详解:MySQL数据库的权限管理 一.MYSQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你权利以内的事情,不可以越界.比如只允许你执行select操作,那么你就不能执行updat ...
- JDBC详解(四):操作BLOB类型字段(超详解)
JDBC详解(四):操作BLOB类型字段 前言 一.MySQL BLOB类型 二.向数据表中插入大数据类型 三.修改数据表中的Blob类型字段 四.从数据表中读取大数据类型 前言 本博主将用CSDN记 ...
- Spring JDBC详解
<Spring JDBC详解> 本文旨在讲述Spring JDBC模块的用法.Spring JDBC模块是Spring框架的基础模块之一. 一.概述 在Spring JDBC模块中,所有的 ...
- 详解 Visual C# 数据库编程
详解 Visual C# 数据库编程 ****** 2007-11-05 14:34 关于数据库编程,微软提供了一个统一的数据对象访问模型,在Visual Studio6.0中称为ADO,在.NET中 ...
- Java中JDBC详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站 点击跳转浏览. JDBC是什么 概念:Java DataBase Connectivity JDBC本 ...
最新文章
- linux 切换python版本_Linux下python默认版本切换成替代版本(示例代码)
- pgjdbc源码分析
- 细聊分布式ID生成方法
- Git分支命令学习使用
- C#/SQL 上周本周
- 深入理解ARM体系架构(S3C6410)---arm7,arm9,arm11区别
- Linux文件权限管理 chmod 读、写、可执行
- 深入Scripting Runtime Library
- [LUOGU] P2886 [USACO07NOV]牛继电器Cow Relays
- ubuntu开机启动+图标配置
- 王燕《应用时间序列分析》学习笔记1
- 计算机社团自评报告怎么写,社团自我评价
- git commit 规范不对导致报错subject may not be empty [subject-empty]type may not be empty [type-empty]
- 九秒倒计时c语言编程,可变信息倒九秒半程倒计时器的制作方法
- python操作gif 图片拆分
- java 过滤bom头_去除bom头.java
- UnityShader学习教程之<矩阵的左乘还是右乘所导致的效果问题>
- Qt5:error: no matching function for call to 'MainWindow::connect()
- 质数与合数系列——素数判断
- 一文了解各大数据库查询语言(Gremlin vs Cypher vs nGQL操作篇
热门文章
- Kafka入门经典教程【转】
- 关于apache虚拟主机htttpd的配置实例 (更新中)
- 浏览器还 data URI协议
- php dns更新,php_mzdns: 站群,大量域名 通过 dns 服务商 api 批量添加 ip 工具。你懂的~ 基于 mzphp2 框架。...
- oracle语句优化pl sql语句,求oracle插入初始数据pl/sql语句优化,该怎么处理(2)
- 地图数据快速渲染------基于传统GIS平台多服务器切片
- Nginx的server_name匹配执行顺序
- MyBatis 插件原理与自定义插件-PageHelper 原理
- TransactionProducer(事务消息)
- 引入了一个IO多路复用模型