1、什么是JDBC
2、JDBC连接数据库的三种方式
2.1、第一种实现方式
2.2、第二种实现方式
2.3、第三种实现方式
3、com.mysql.jdbc.Driver的内部实现
1、什么是JDBC
使用java代码(程序)发送sql语句的技术
使用jdbc发送sql前提需要知道:数据库的IP地址、端口、数据名、用户名和密码。
JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
---------------------------SQL Server------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbname>
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
--------------------------DB2--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<machine_name><:port>/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000
-------------------------------------------------------
2、JDBC连接数据库的三种方式
2.1、第一种实现方式
package com.rk.db.a_jdbc;
import java.sql.Driver;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class Demo01
{
public static void main(String[] args) throws SQLException
{
// jdbc协议:数据库子协议:主机:端口/连接的数据库 //
String url = "jdbc:mysql://localhost:3306/testdb";
String username = "root";
String password = "root";
//1.创建驱动程序类对象
Driver driver = new com.mysql.jdbc.Driver();
//设置用户名和密码
Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
//2.连接数据库,返回连接对象
Connection conn = driver.connect(url, props);
System.out.println(conn);
}
}
2.2、第二种实现方式
package com.rk.db.a_jdbc;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
public class Demo02
{
public static void main(String[] args) throws SQLException
{
String url = "jdbc:mysql://localhost:3306/testdb";
String username = "root";
String password = "root";
Driver driver = new com.mysql.jdbc.Driver();
//1.注册驱动程序(可以注册多个驱动程序)
DriverManager.registerDriver(driver);
//2.连接到具体的数据库
Connection conn = DriverManager.getConnection(url, username, password);
System.out.println(conn);
}
}
2.3、第三种实现方式
package com.rk.db.a_jdbc;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
public class Demo03
{
public static void main(String[] args) throws ClassNotFoundException, SQLException
{
String url = "jdbc:mysql://localhost:3306/testdb";
String user = "root";
String password = "root";
//通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
//连接到具体的数据库
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
}
}
3、com.mysql.jdbc.Driver的内部实现
在这里主要解释一个问题,也就是在2.3中,并没有写代码用DriverManager对com.mysql.jdbc.Driver的实例进行注册,原因就在于com.mysql.jdbc.Driver的源码当中。
在com.mysql.jdbc.Driver类中提供了一个static(静态)代码段,如下:
java.sql.DriverManager.registerDriver(new Driver());
完整代码如下:
------com.mysql.jdbc.Driver类中提供了static代码段,主动向DriverManager进行注册
java.sql.DriverManager.registerDriver(new Driver());
package com.mysql.jdbc;
import java.sql.SQLException;
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!");
}
}
public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}