1、什么是JDBC
2、JDBC连接数据库的三种方式
2.1、第一种实现方式
2.2、第二种实现方式
2.3、第三种实现方式
3、com.mysql.jdbc.Driver的内部实现
使用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 -------------------------------------------------------
package com.rk.db.a_jdbc; import java.sql.Driver; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; /** * jdbc连接数据库 * 第一种方法:通过创建JDBC实现类的驱动类对象建立数据库连接 * @author RK * */ 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); } }
package com.rk.db.a_jdbc; import java.sql.Driver; import java.sql.DriverManager; import java.sql.Connection; import java.sql.SQLException; /** * jdbc连接数据库 * 第二种方法:使用驱动管理器类连接数据库(注册了两次,没必要) * @author RK * */ 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); } }
package com.rk.db.a_jdbc; import java.sql.DriverManager; import java.sql.Connection; import java.sql.SQLException; /** * jdbc连接数据库 * 第三种方法:使用加载驱动程序类 来 注册驱动程序(推荐使用这种方式连接数据库) * @author RK * */ 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); } }
在这里主要解释一个问题,也就是在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!"); } } /** * Construct a new driver and register it with DriverManager */ public Driver() throws SQLException { // Required for Class.forName().newInstance() } }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。