精华内容
下载资源
问答
  • java 加载数据库驱动

    2021-02-26 20:12:31
    JDBC编程步骤见JDBC编程的第一步是加载数据库驱动,使用Class类的forName()方法,Class.forName("com.mysql.jdbc.Driver")。//加载MySQL驱动Class.forName("com.mysql.jdbc.Driver");//获取数据库连接Connection ...

    JDBC编程步骤见

    JDBC编程的第一步是加载数据库驱动,使用Class类的forName()方法,Class.forName("com.mysql.jdbc.Driver")。

    //加载MySQL驱动

    Class.forName("com.mysql.jdbc.Driver");//获取数据库连接

    Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/crashcourse", "root", "123456");

    比较令人疑惑的是,它是如何加载驱动的,后续的DriverManager又是如何利用该驱动的。

    打开Driver源码,可以看到如下的内容

    /***

    *

    * When a Driver class is loaded, it should create an instance of itself and register it with the DriverManager.

    * This means that a user can load and register a

    * driver by doing Class.forName("foo.bah.Driver")*/

    源码中的静态代码块:

    static{try{

    java.sql.DriverManager.registerDriver(newDriver());

    }catch(SQLException E) {throw new RuntimeException("Can‘t register driver!");

    }

    }

    由此可知,Class.forName("com.mysql.jdbc.Driver"),加载Driver类且静态初始化该类时,会创建Driver对象,并由DriverManager进行register。

    mark

    原文:https://www.cnblogs.com/deltadeblog/p/9405236.html

    展开全文
  • [导读]JDBC作为数据库访问的规范接口,其中只是定义一些接口。具体的实现是由各个数据库厂商来完成。...Java SQL 框架允许多个数据库驱动程序。每个驱动程序都应该提供一个实现 Driver 接口的类。Driv...

    [导读]JDBC作为数据库访问的规范接口,其中只是定义一些接口。具体的实现是由各个数据库厂商来完成。

    JDBC作为数据库访问的规范接口,其中只是定义一些接口。具体的实现是由各个数据库厂商来完成。

    一、重要的接口:

    1.public interface Driver 每个驱动程序类必须实现的接口。Java SQL 框架允许多个数据库驱动程序。每个驱动程序都应该提供一个实现 Driver 接口的类。DriverManager 会试着加载尽可能多的它可以找到的驱动程序,然后,对于任何给定连接请求,它会让每个驱动程序依次试着连接到目标 URL。强烈建议每个 Driver 类应该是小型的并且是单独的,这样就可以在不必引入大量支持代码的情况下加载和查询 Driver 类。在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序   Class.forName("foo.bah.Driver")。例如:MYSQL驱动com.mysql.jdbc.Driver

    2.public interface Connection 与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

    3.public interface Statement 用于执行静态 SQL 语句并返回它所生成结果的对象。

    4.public interface PreparedStatement 表示预编译的 SQL 语句的对象。SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。

    二、驱动的加载方式

    1.最常用的是使用 Class.forName("com.mysql.jdbc.Driver");方式。这行代码只是使用当前的类加载去加载具体的数据库驱动,不要小看这简单的这一行代码。在Driver类中的static域中把当前驱动注册到DriverManager中。static {

    try {

    java.sql.DriverManager.registerDriver(new Driver());//注册驱动

    } catch (SQLException E) {

    throw new RuntimeException("Can't register driver!");

    }

    }

    2.通过查看DriverManager源码,我们也可以使用System.setProperty("jdbc.drivers","....")方式。String drivers;

    try {

    drivers = AccessController.doPrivileged(new PrivilegedAction() {

    public String run() {

    return System.getProperty("jdbc.drivers");

    }

    });

    } catch (Exception ex) {

    drivers = null;

    }String[] driversList = drivers.split(":");

    println("number of Drivers:" + driversList.length);

    for (String aDriver : driversList) {

    try {

    println("DriverManager.Initialize: loading " + aDriver);

    Class.forName(aDriver, true,

    ClassLoader.getSystemClassLoader());

    } catch (Exception ex) {

    println("DriverManager.Initialize: load failed: " + ex);

    }

    }

    3.最直接(不推荐)方式new com.mysql.jdbc.Driver();

    4.为了更好的使用数据库驱动,JDBC为我们提供了DriverManager类。如果我们都没有使用以上方式,DriverManager初始化中会通过ServiceLoader类,在我们classpath中jar(数据库驱动包)中查找,如存在META-INF/services/java.sql.Driver文件,则加载该文件中的驱动类。AccessController.doPrivileged(new PrivilegedAction() {

    public Void run() {

    ServiceLoader loadedDrivers = ServiceLoader.load(Driver.class);

    Iterator driversIterator = loadedDrivers.iterator();

    /* Load these drivers, so that they can be instantiated.

    * It may be the case that the driver class may not be there

    * i.e. there may be a packaged driver with the service class

    * as implementation of java.sql.Driver but the actual class

    * may be missing. In that case a java.util.ServiceConfigurationError

    * will be thrown at runtime by the VM trying to locate

    * and load the service.

    *

    * Adding a try catch block to catch those runtime errors

    * if driver not available in classpath but it's

    * packaged as service and that service is there in classpath.

    */

    try{

    while(driversIterator.hasNext()) {

    driversIterator.next();

    }

    } catch(Throwable t) {

    // Do nothing

    }

    return null;

    }

    });

    展开全文
  • import java.sql.*;public class Main {public static void main(String [] args){String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";String dbURL="jdbc:sqlserver://127.0.0.1:1433;DatabaseName...

    c5bc8bc6965b9e52141d57d38ca763e2.png

    import java.sql.*;

    public class Main {

    public static void main(String [] args)

    {

    String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";

    String dbURL="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jsp";

    String userName="sa";

    String userPwd="1234";

    try

    {

    Class.forName(driverName);

    System.out.println("加载驱动成功!");

    }catch(Exception e){

    e.printStackTrace();

    System.out.println("加载驱动失败!");

    }

    try{

    Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);

    System.out.println("连接数据库成功!");

    }catch(Exception e)

    {

    e.printStackTrace();

    System.out.print("SQL Server连接失败!");

    }

    }

    }网上给出的检测代码

    展开全文
  • JAVA加载数据库驱动(JDBC)前言之前,对Class.forName("com.mysql.jdbc.Driver");这条动态加载JDBC驱动感觉很疑惑,故有了这篇短文。一、使用JDBC连接MySQL首先,来看一下正常使用Java操纵MySql的简单代码逻辑。...

    JAVA加载数据库驱动(JDBC)

    前言

    之前,对Class.forName("com.mysql.jdbc.Driver");这条动态加载JDBC驱动感觉很疑惑,故有了这篇短文。

    一、使用JDBC连接MySQL

    首先,来看一下正常使用Java操纵MySql的简单代码逻辑。

    public static boolean connectionMySqlDemo() {

    Connection conn = null;

    try {

    // 1、动态加载mysql驱动

    Class.forName("com.mysql.jdbc.Driver");

    // 2、连接数据库

    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?"

    + "user=root&password=1234&useUnicode=true&characterEncoding=UTF8");

    // 3、声明一个Statement 用来执行sql语句

    Statement stmt = conn.createStatement();

    // 4、执行sql语句

    stmt.executeUpdate("create table student(no_id char(20),name varchar(20),primary key(no_id))");

    int result = stmt.executeUpdate("insert into student(no_id,name) values('1','fxleyu')");

    if (result > 0) {

    ResultSet rs = stmt.executeQuery("select * from student");

    while (rs.next()) {

    System.out.println(rs.getString(1));

    }

    }

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (SQLException e) {

    e.printStackTrace();

    } finally {

    // 5、关闭数据库

    if (conn != null) {

    try {

    conn.close();

    return true;

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    }

    return false;

    }

    在上述代码中,动态加载数据库驱动那条语句感觉独立于其余代码逻辑。感觉缺少其并无关系(当然缺少了会在链接数据库时报java.sql.SQLException: No suitable driver found for)。

    二、疑惑

    上述代码很容易理解,除了如下Class.forName("com.mysql.jdbc.Driver");。正常理解,该语句只是加载把com.mysql.jdbc.Driver加载到JVM中,没不会产生特殊作用。

    阅读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!");

    }

    }

    /**

    * Construct a new driver and register it with DriverManager

    *

    * @throws SQLException

    * if a database error occurs.

    */

    public Driver() throws SQLException {

    // Required for Class.forName().newInstance()

    }

    }

    原来该类中有静态代码库,其加载到JVM时,会执行该静态代码库。而该代码块会把该类的对象实例自注册到DriverManager中。如此第一部分中的第二步就很容易理解了。

    // 2、连接数据库

    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?"

    + "user=root&password=1234&useUnicode=true&characterEncoding=UTF8");

    其就是可以根据String来获得上述加载的驱动,从而可以正常访问数据库。

    三、余以为

    代码的逻辑很重要,而Class.forName("com.mysql.jdbc.Driver");单独来看只是一条孤立的语句。没有和上下文代码产生显示的关联,这就导致了余在前言中的疑惑。故,使用Class.forName("com.mysql.jdbc.Driver");来动态注册驱动,会对当前代码逻辑产生不利影响。

    正常的逻辑,Class.forName方法就是加载一个指定类,并对该类做一些初始化工作(使用静态代码库),其不应该做一些其它逻辑,例如动态注册驱动。如果需要注册驱动时,应该让用户自己使用DriverManager.registerDriver(new com.mysql.jdbc.Driver());来显示注册。这样代码逻辑会很清晰。

    但在这里使用显示注册并不合适。因为当new com.mysql.jdbc.Driver()的动作中,就有类的加载过程。在该过程中,已经把该驱动加载到了DriverManager的列表中。而有显示的注册了一次,故DriverManager的列表会有两个com.mysql.jdbc.Driver实例。也就是说,MySql的jdbc并不适合用来进行显示加载。

    当然,也许使用Class.forName("com.mysql.jdbc.Driver");有MySql团队自己的考虑,而我当前视野并没有看到其好处。

    四、结束

    Talk is cheap, show me the code. 当对某些代码逻辑有疑问时,不妨查看一下相关源码,就会豁然开朗。自勉。P.S. 第三部分的余以为灵感借鉴于“余晟以为”微信公众号,很喜欢他那句“我是这么以为的,当然你也可以那么以为”。

    参考

    展开全文
  • 1.加载 数据库驱动( Class.forName(String className) ):因为Java是一种纯面向对象的编程语言,所以一切事物都可以看作是类或者类对象,数据库也是,Java正是通过JDBC将数据库抽象成为对象,然后对该对象进行操作。...
  • public class LoadDBdriver {/***复制.jar文件到java安装包的"jre>lib>ext"文件夹下。* @param args* @author 劳黑炭*/// private static final String DB_DRIVER ="org.apache.derby.jdbc.EmbeddedDriver...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class T2{public static void main(String[] args){try{Class.forName(...
  • 永远都是 ClassNotFoundException 尝试过以下方案,同时尝试... 环境: Eclipse Java EE - Mars Release (4.5.0) Build 20150621-1200 JDK 7u75 Tomcat 8.0.23 mysql-connector-java-5.1.35-bin.jar Windows 6.3.9600
  • 利用Java如何实现动态加载数据库驱动发布时间:2020-11-19 16:44:28来源:亿速云阅读:101作者:Leah利用Java如何实现动态加载数据库驱动?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决...
  • 1. 加载数据库驱动:1) 由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构;2) JDBC将整个数据库驱动器在底层抽象成一个对象(即驱动...
  • java连接数据库 package com.cook.zheng; import java.sql.Connection; import java.sql.DriverManager; public class TestDemo { private static final ...//加载驱动 private static final String DBURL="jdbc
  • Java JDBC 数据库驱动

    2021-03-22 16:55:16
    一、加载数据库驱动加载数据库驱动的三种方式:1、Class.forName("com.mysql.jdbc.Driver");2、Driver driver = new com.mysql.jdbc.Driver();DriverManager.registerDriver(driver);3、System.setProperty("jdbc....
  • 好忧伤,java连接sql数据库加载驱动就是失败了以下是代码部分packagecom.test;importjava.sql.*;publicclassTest{publicvoidgetConnectionSqlServer(){StringdriverName="com.jdbc.sqlserver.SQLServerDriver";...
  • publicclassConnectionDemo1{publicstaticfinalStringDBDriver="org.gjt.mm.mysql.Driver";publicstaticvoidmain(String[]args){try{Classdiv=Class.forName(DBDriver);System.out.println("驱动加载成功!");}c...
  • DriverManager 类包含一列Driver 类,它们已通过调用方法DriverManager.registerDriver 对自己进行了注册。所有Driver 类都必须包含有一个静态部分。它创建该类的实例,然后...而是在加载驱动程序时由驱动程序自动调...
  • 加载驱动:连接不同的数据库加载不同的驱动;建立连接:访问一个数据库,要知道IP+端口号+数据库名,此外还有用户名和密码;声明要求:将sql语句传送给数据库服务器;执行:执行sql语句返回结果集;关闭:断开连接...
  • java.lang.ClassNotFoundException:orcale.jdbc.driver.oracleDriveratjava.net.URLClassLoader$1.run(URLClassLoader.java:200)atjava.security.AccessController.doPrivileged(Nati...java.lang.ClassNotFoundExce...
  • 请问java连mysql数据库时一直加载不起驱动我是新手,下了mysql官方的:mysql-connector-java-5.1.30-bin.jar环境变量中的:classpath值为:D:\ProgramFiles\Java\jdk1.7.0_09\lib\mysql-connector-java-5.1.30-bin....
  • [java]代码库/*** 各种数据库驱动加载以及链接方式** MySQL / SQL Server / Sysbase / Oracle / PostgreSQL / DB2 / Informix / JDBC-ODBC**/// MySQL:String Driver = "com.mysql.jdbc.Driver"; // 驱动程序...
  • 建立JDBC ODBC桥接器和加载Java数据库驱动程序《Java2实用教程(第4版)》 第11章 配合例子源代码一起使用 导读 §11.1 Microsoft Access 数据库管理系统 §11.1.1 建立数据库 §11.1.2 创建表 §11.2 JDBC §11.3 ...
  • 这个可以单独写一个database,用的时候调用就...会自动连接数据库。如果满意请采纳package tom.servlet; //包名import java.sql.*;public class database{connection con=null;//声明connection引用statement stat;r...
  • 1. 加载数据库驱动通常来说,JDBC 使用 Class 类的 forName() 静态方法来加载驱动,需要输入数据库驱动代表的字符串。例如:加载 MySQL 驱动:Class.forName("com.mysql.jdbc.Driver");加载 Oracle 驱动:Class.for...
  • java加载SQL的驱动程序

    2021-02-28 15:42:47
    importjava.sql.*;publicclasstest{//指定驱动程序privatestaticStringdriver=...//创建指定数据库的URLprivatestaticStringurl="Jdbc:...import java.sql.*;public class test{//指定驱...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,990
精华内容 58,396
关键字:

java数据库驱动加载

java 订阅