JDBC源码分析(1)
来源:互联网 发布:去日本带mac好吗 编辑:程序博客网 时间:2024/06/05 12:06
JDBC(Java Data Base Connectivity)
简单来说就是用java语言来操作数据库,JDBC是一套标准,他由一些接口和实现类组成。
其中最主要的接口和实现类有以下几个:
- 接口
java.sql .Connection
java.sql .ResultSet
java.sql .Statement
java.sql .PrepareStatement
javax.sql.DataSource - 类
java.lang.DriverManager
连接数据库
假如我们要通过程序去操作数据那么我们首先要链接到数据库,这就需要数据库驱动,什么是驱动那?两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。
不同的数据库需要不同驱动jar。接下来以mysql为例
将驱动jar导入项目:
连接数据库
DriverManager 可以理解成是一个容器(Vector),可以装入很多数据库驱动 两个重要的方法
public static void registerDriver(Driver driver) throws SQLException //注册驱动public static Connection getConnection(String url,String user,String password) //连接数据库
package driver;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import com.mysql.jdbc.Driver;public class Demo { public static void main (String[] args) throws SQLException{ //注册驱动 DriverManager.registerDriver(new Driver()); //连接数据库 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/springdemo","root","admin"); System.out.println(con); }}
public static synchronized void registerDriver(java.sql.Driver driver) throws SQLException { registerDriver(driver, null); }
传入的参数:java.sql.Driver 而我们传入的是com.mysql.jdbc.Driver
public class Driver extends NonRegisteringDriver implements java.sql.Driver { static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } public Driver() throws SQLException { // Required for Class.forName().newInstance() }}
观察看到Driver中有一个静态代码块,已经为我们创建了一个Driver实例。这样的话我们再实例化就在DriverManager中存在两个驱动,影响了性能。怎么解决?在构造中明确的提示我们可以使用反射调用
package driver;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class Demo { public static void main(String[] args) throws SQLException { // 注册驱动 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 连接数据库 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/springdemo", "root", "admin"); System.out.println(con); }}
1.只加载一次,装入一个驱动对象.
2.降低耦合,不依赖于驱动.
url的格式
mysql: jdbc(主协议):mysql(子协议)://localhost(主机):3306(端口号)/springdemo(数据库名)
oralce url: jdbc:oracle:thin:@localhost:1521:sid
1 0
- JDBC源码分析(1)
- spring jdbc 源码 分析
- jdbc 驱动源码分析
- JDBC源码分析
- JDBC源码分析
- spring 源码分析 spring jdbc
- JAVA JDBC(MySQL)驱动源码分析(一)
- JAVA JDBC(MySQL)驱动源码分析(二)
- JAVA JDBC(MySQL)驱动源码分析(三)
- JAVA JDBC(MySQL)驱动源码分析(四)
- JAVA JDBC(MySQL)驱动源码分析(二)
- JAVA JDBC(MySQL)驱动源码分析
- PostgreSQL JDBC 源码分析之fetchSize
- JAVA JDBC(MySQL)驱动源码分析
- phoenix jdbc driver查询源码分析
- 基于PostgreSQL链接JDBC源码分析
- tomcat-jdbc Pool 源码实现简单分析
- JDBC源码分析&桥接模式
- vlc播放实时流长时间运行问题解决方案
- 素数筛选 素数分解
- MongoDB $group
- Android-Notification(通知)
- Ubuntu16.04安装tomcat
- JDBC源码分析(1)
- HeadFirst Java学习笔记——类间交互
- 定义结构体时变量名后的冒号和数字
- 我理解的动态绑定
- JPA学习笔记(二)
- Mybatis最入门---代码自动生成(generatorConfig.xml配置)
- JVM
- ajax
- 输入框设置为不可修改