精华内容
下载资源
问答
  • 2014-06-28 21:08:51



    1、下载Mysql数据库驱动程序:下载地址: http://dev.mysql.com/downloads/connector/j/5.1.html,
    找到Connector/J选项,选择相应的下载文件进行下载。
    2、配置系统变量classpath:
    打开环境变量配置,在系统变量CLASSPATH中添加mysql数据库的驱动程序的本地地址,如:.;E:\mysql-connector-java-5.1.26-bin.jar
    (注意前面有一个"."(点)和一个";"(分号))
    3、加载驱动程序
    在数据库连接程序的Class.forName()语句加载一个驱动程序:
    Class实例化需要一个完整的包.类名称,此:“包.类”名称的路径就应该是驱动程序的名称。
    如:使用WinRar打开mysql-connector-java-5.1.26-bin.jar驱动程序包,在org\gjt\mm\mysql中找到Driver.class驱动程序。在代码中添加以下语句:
    //定义Mysql的数据库驱动程序
    Class.forName("org.gjt.mm.mysql.Driver");
    注意:如果在运行程序时出现以下错误,则表示classpath配置有问题:
    java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Class.java:190)
            at DB.getConnection(UserManager.java:18)
            at UserManager.main(UserManager.java:41)
    Exception in thread "main" java.lang.NullPointerException
            at UserManager.main(UserManager.java:45)
    4、之后就进行数据库的连接及SQL操作即可。

    更多相关内容
  • 本篇文章主要介绍了详解Java动态加载数据库驱动,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • JDBC加载数据库驱动的方式

    千次阅读 2021-03-06 15:49:24
    [导读]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;

    }

    });

    展开全文
  • 包含 SqlServer Mysql Access 。。。。等驱动都有。
  • JDBC加载数据库驱动的三种方法 简单高效
  • java规范怎么加载数据库驱动

    千次阅读 2019-09-17 09:46:58
    class.forName与加载机制有关,会触发执行com.mysql.jdbc.Driver中的静态方法,从而使主类加载数据库驱动。 但是在最新的DriverManager源码中,可以不需要使用class.forName显示加载JDBC驱动程序,加了也没有...

    1、class.forName(“com.mysql.jdbc.Driver”)到底做了什么事?
    class.forName与类加载机制有关,会触发执行com.mysql.jdbc.Driver类中的静态方法,从而使主类加载数据库驱动。
    但是在最新的DriverManager源码中,可以不需要使用class.forName显示加载JDBC驱动程序,加了也没有问题

    2、为什么它的静态块没有自动触发?
    因为数据库驱动类的特殊性质,JDBC规范中明确要求Driver类必须向DriverManager注册自己,导致其必须由class.forName手动触发,这可以在java.sql.Driver中得到解释

    源码

    java建立数据库连接的方式
    以mysql驱动为例子,代码如下

    Class.forName("com.mysql.jdbc.Driver");//通过static静态块的加载,将对应的驱动存放到registeredDrivers 集合中
    String url = "jdbc:mysql://localhost:3306/database_name";
    String user = "root";
    Strign password = "root"
    //建立连接
    Connection conn = DriverManager.getConnection(url, user, password); //getConnection实际上只是遍历registeredDrivers 集合,然后去尝试连接而已
    

    以上连接分了两个阶段进行
    1、Class.forName(“com.mysql.jdbc.Driver”);
    通过类加载机制去加载mysql驱动包中的com.mysql.jdbc.Driver类,触发静态块代码的执行(static{})

    package com.mysql.jdbc;
    
    import java.sql.SQLException;
    
    public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    
        //即类加载的时候触发该静态块代码执行
        static {
            try {
                //向DriverManager注册本身
                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()
        }
    }
    

    DriverManager是java提供的一个获取数据库连接的通用类,各厂商通过registerDriver将自己都扩展实现注册到一个线程安全都集合中(只需实现Driver接口,即可存)

    DriverManager.java
    
    public static synchronized void registerDriver(java.sql.Driver driver)
            throws SQLException {
            registerDriver(driver, null);
    }
    public static synchronized void registerDriver(java.sql.Driver driver,
                DriverAction da)
            throws SQLException {
            /* Register the driver if it has not already been added to our list */
            if(driver != null) {
                //将厂商都驱动包注册进集合中
                registeredDrivers.addIfAbsent(new DriverInfo(driver, da));
            } else {
                // This is for compatibility with the original DriverManager
                throw new NullPointerException();
            }
            println("registerDriver: " + driver);
    }
    

    2、Connection conn = DriverManager.getConnection(url, user, password);建立连接
    在这里插入图片描述

    实际上获取connection的逻辑处理,只是去遍历集合,能够成功连接上数据库,则返回对应都连接,失败则忽略
    不会管你集合中注册了多少个数据库驱动,我从头到尾试一次,能成功都就返回

    //支持并发都list
    private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();
    
    private static Connection getConnection(
        String url, java.util.Properties info, Class<?> caller) throws SQLException {
        for(DriverInfo aDriver : registeredDrivers) {    
             Connection con = aDriver.driver.connect(url, info);
             if (con != null) {
                  // Success!
                  println("getConnection returning " + aDriver.driver.getClass().getName());
                  return (con);
             }   
        }
    }
    

    :CopyOnWriteArrayList 支持高并发,在读都时候不会加锁,当插入,删除,更改操作都时候,拷贝一份副本去写入,然后再替换原来的集合,只允许一个线程去操作(加锁)

    优点:读无锁,效率高,适合读多写少的情况,例如配置、黑名单、物流地址等变化非常少的数据

    缺点:每次都要拷贝一份副本,占用内存,频繁GC。同时,只能保证最终的一致性,无法保证实时,因为在写入副本都同时,读的时旧副本

    展开全文
  • 图片中的提示,有关于Db,那就是数据库中的配置有问题,随后查看config中的代码,乍看之下,没有问题: <?php return array( //'配置项'=>'配置值' 'DB_TYPE '=>'mysql', //数据库类型名 'DB_HOST'=>...

    学习thinkPHP中出现了,如下图片:
    在这里插入图片描述
    图片中的提示,有关于Db,那就是数据库中的配置有问题,随后查看config中的代码,乍看之下,没有问题:

    <?php
    return array(
    	//'配置项'=>'配置值'
        'DB_TYPE '=>'mysql',    //数据库类型名
        'DB_HOST'=>'127.0.0.1', //host地址,也可以填写localhost
        'DB_USER'=>'root',  //数据库用户名
        'DB_PWD'=>'root',   //数据库密码
        'DB_NAME'=>'navigation',    //数据名
        'DB_PREFIX'=>'nav_',    //表前缀
    );
    

    但是要明白一点,配置中的小分号中是不允许有空格出现的!

    'DB_TYPE '=>'mysql',    //数据库类型名
    'DB_TYPE'=>'mysql',    //数据库类型名
    //这是两个截然不同的概念!!!!
    

    工:IT资料网,有什么问题,可以一起探讨
    还是要细心!

    展开全文
  • 数据库驱动加载失败,数据库连接失败 我用的开发环境是IDEA,我先讲解IDEA出现问题,如何解决。 对于一些初学者,尤其是自学的人来说,很多人都会遇到数据库驱动加载失败,数据库连接失败的问题,但是好多时候都不...
  • sqlserver2008数据库驱动jar包 sqlserver2008数据库驱动jar包 sqlserver2008数据库驱动jar包 sqlserver2008数据库驱动jar包
  • 加载驱动:连接不同的数据库加载不同的驱动;建立连接:访问一个数据库,要知道IP+端口号+数据库名,此外还有用户名和密码;声明要求:将sql语句传送给数据库服务器;执行:执行sql语句返回结果集;关闭:断开连接...
  • 在Idea中加载数据库驱动

    千次阅读 2019-07-23 10:34:41
    在Idea中加载数据库驱动 在这里我以mysql作为例子 首先去官网下载相应的数据库驱动,mysql驱动下载地址:https://dev.mysql.com/downloads/connector/j/ 下载好解压到相应的位置(放在自己能找到的位置,别乱放,...
  • 今天在编写数据迁移工具的时候,包含多个数据源,导致需要取消springboot 项目启动加载数据库驱动的功能 springboot 项目启动加载数据库驱动原理: spring boot默认会加载:org.springframework.boot....
  • 数据库驱动加载失败问题

    千次阅读 2020-04-20 18:24:36
    数据库驱动加载失败问题 自学Java web记录 1今天遇到了数据库驱动加载失败的问题 在web项目发布访问时报错:com.mchange.v2.c3p0.DriverManagerDataSourceensureDriverLoaded 检查查找资料后终于发现问题所在:在...
  • MySQL驱动程序JAR包,JAVA开发连接MySQL数据库驱动JAR包,非常实用!使用方式见:http://blog.csdn.net/jisuanjiguoba/article/details/79302334
  • Class.forName():将的.class文件加载到jvm中之外,还会对进行解释,执行中的static代码块。 ClassLoader.loadClass():只会将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行...
  • qt高版本没有数据库驱动,下载这个解压到对应套件的bin文件上就行了。之后再次重启QT运行数据库模块就可以了,但是有个BUG,在QT打包之后需要在打包后的文件添加这两个dll
  • 5.x 版本的jar包加载驱动(mysql-connector-java-5.x.x-bin.jar) Class.forNmae("com.mysql.jdbc.Driver"); 8.x版本的jar包加载驱动(mysql-connector-java-8.x.x-bin.jar) Class.forName(...
  • idea如何加载MySQL数据库驱动

    千次阅读 2020-02-11 21:33:44
    方法如下; 方法一: ①点击databas–>Data Source–>MySQL ②然后在本页面填写连接数据库的信息 ...④没有导入数据据库驱动会出现下面提示 ...④选择数据库驱动: ⑤点击蓝色按钮,大功告成! ...
  • 如题 我在工程里面实现了ApplicationListener接口,用于在web工程...在tomcat中启动工程时无法加载数据库驱动,在网上看到一些资料说是使用了不同的加载器造成的,不知道有没有大神遇到相似的问题,有没有解决的方法
  • 无法加载数据库驱动: Think\Db\Driver\

    千次阅读 2018-07-13 11:36:47
    这个是和config文件中数据库连接这一块分不开的。之前出现这样报错,后来将这个已注释的数据库取消注释后,就没有报错了
  • 1. 加载数据库驱动:  1) 由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成或者对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构;  2) JDBC将整个数据库驱动器在底层抽象成一个对象...
  • 运行环境 Linux VM_16_32_centos 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux PHP 5.6.31 (cli) (built: Jul 14 ...百度云的数据库 ThinkPHP版本 3.2.3 抛...
  • 2.加载驱动包 3.导入工具,建立连接 4.测试 数据库连接撕四步走 1..加载驱动 Class.forName("com.mysql.jdbc.Driver"); 2.获取连接 conn = DriverManager.getConnection(url,username,psw); 3.数据库相关操作,增...
  • 首先要导入JDBC的jar包;接下来,代码:Class.forName...JDBC连接数据库• 创建一个以JDBC连接数据库的程序,包含7个步骤:1、加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库驱动到JVM(java虚拟...
  • web程序想要连接sql server数据库时,必须要加载驱动类,需要驱动包。该资源为sql server的驱动包。
  • JDBC连接数据库时候,需要使用数据库的sid_name,而不是数据库的service_name,而使用plsql连接数据库的时候,只需要数据库的service_name
  • 程序运行后出现这个错误,应该怎么解决? 无法加载数据库驱动: DbMysql 5.1.48-log
  • 数据库配置项目不要在Home/Conf/config.php里设置 ...附上配置信息 //数据库配置信息 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => 'lianxi_1', /
  • 问题:用DSN方式连数据库报错:无法加载数据库驱动: Think\Db\Driver\,Common/Conf/config.php里也配置了'DB_TYPE'=&gt;'mysql', 直接用thinkphp的Model方式连数据库没问题,但是用DSN方式就报错( Db::...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 211,648
精华内容 84,659
关键字:

如何加载数据库的驱动类