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

    2020-12-06 17:15:16
    传统的使用jdbc来访问数据库的流程为: Class.forName(“com.mysql.jdbc.Driver”); String url = “jdbc:mysql://localhost:3306/test?user=root&password=123456″; Connection con = DriverManager.get...

    传统的使用jdbc来访问数据库的流程为:

    Class.forName(“com.mysql.jdbc.Driver”);
    String url = “jdbc:mysql://localhost:3306/test?user=root&password=123456;
    Connection con = DriverManager.getConnection(url);
    Statement statement = con.createStatement();
    

    最开始使用的时候,不明白为什么首先要加载一个驱动类,之后就可以取得了Connection了,很好奇DriverManager是怎么获得那个驱动类的信息,后来看了下com.mysql.jdbc.Driver这个类的源代码,豁然开朗了。原来在com.mysql.jdbc.Driver类中有这么一段静态初始化代码:

    static {
    try {
    java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException(“Can’t register driver!);
     }
    }
    

    也就是,在Class.forName加载完驱动类,开始执行静态初始化代码时,会自动新建一个Driver的对象,并调用DriverManager.registerDriver把自己注册到DriverManager中去。

    ps1: Class.forName(String) 与ClassLoader.loadClass(String)的区别

    • Class.forName(String): 加载类,并且执行类初始化;
      可以通过Class.forName(String, boolean, ClassLoader)第二个参数来仅仅加载类不执行初始化;
    • ClassLoader.loadClass(String): 仅仅加载类,不执行类初始化;

    ps2: 有时会看到这种用法:
    Class.forName(“com.mysql.jdbc.Driver”).newInstance();
    这是没有必要的,正如前述,静态初始化已经new了一个Driver的对象,注册到DriverManager中去,在此再建立一个Driver对象则是完全没有必要的,浪费空间。

    ps3: 结合ps1,Class.forName(“com.mysql.jdbc.Driver”);相当于:
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    Class cls = loader.loadClass(“com.mysql.jdbc.Driver”);
    cls.newInstance();
    这种方法的问题同ps2, 浪费了一个Driver对象;

    ps4: 在java 6中,引入了service provider的概念,即可以在配置文件中配置service(可能是一个interface或者abstract class)的provider(即service的实现类)。配置路径是:/META-INF/services/下面。详细信息见:http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#Service%20Provider
    而java.sql.DriverManager也添加了对此的支持,因此,在JDK6中,DriverManager的查找Driver的范围为:

    1)system property “jdbc.drivers” 中配置的Driver值;
    2)用户调用Class.forName()注册的Driver 3)service
    provider配置文件java.sql.Driver中配置的Driver值。

    因此,在jdk6中,其实是可以不用调用Class.forName来加载mysql驱动的,因为mysql的驱动程序jar包中已经包含了java.sql.Driver配置文件,并在文件中添加了com.mysql.jdbc.Driver.但在JDK6之前版本,还是要调用这个方法。

    展开全文
  • 本篇文章主要介绍了详解Java动态加载数据库驱动,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • [导读]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;

    }

    });

    展开全文
  • 数据库连接池的基本原理就是为数据库建立一个缓冲池。在缓冲池中先创建指定数量的数据库连接,当有连接请求时就从缓冲池中取出处于“空闲”状态的连接,并将此连接标记为“忙碌”,直到该请求进程结束后,它所使用的...
  • 简单的完成android数据库注册登陆操作 适合新手学习
  • 注册数据库驱动的三种方式

    千次阅读 2014-07-12 11:08:00
    直接注册驱动: Class.forName("com.mysql.jdbc.Driver"); //实现 try { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/test"; Connection con= ...
    1. 直接注册驱动:

    Class.forName("com.mysql.jdbc.Driver");
    
    //实现
    try {
    			Class.forName("com.mysql.jdbc.Driver");
    			String url="jdbc:mysql://localhost:3306/test";
    			Connection con= DriverManager.getConnection(url, "root", "123");
    			System.out.println(con);
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}

    2.通过DriverManager.registerDriver()注册驱动

    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    
    //实现
    String url="jdbc:mysql://localhost:3306/test";
    		
    		//extends Hashtable<Object,Object>
    		Properties info=new Properties();
    		
    		info.setProperty("user", "root");
    		info.setProperty("password", "123");
    		
    		//向驱动管理器注册驱动 ,是把mysql驱动类的对象放置到集合中
    		try {
    			DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    			Connection con=DriverManager.getConnection(url, info);
    			System.out.println(con);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}

    3.新建厂商实现的com.mysql.jdbc.Driver类

    java.sql.Driver driver=new com.mysql.jdbc.Driver();
    
    //实现:
    try {
    			//com.mysql.jdbc.Driver是Java.sql.Driver的厂商的实现
    			java.sql.Driver driver=new com.mysql.jdbc.Driver();
    			
    			//要连接到的数据库的URL
    			String url="jdbc:mysql://localhost:3306/test";
    			
    			//extends Hashtable<Object,Object>
    			Properties info=new Properties();
    			
    			info.setProperty("user", "root");
    			info.setProperty("password", "123");
    			
    			//获取connection连接
    			Connection con=driver.connect(url, info);
    			
    			System.out.println(con.toString());
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}

    驱动注册成功之后,基本上可以通过DriverManager.getConnection(url,user,password)来获取数据库的连接

    try{
           Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
           String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议
           Connection conn=DriverManager.getConnection(url,"username","password");
           Statement stmt=conn.createStatement();
           ResultSet rs=stmt.executeQuery("select * from tablename");
           while(rs.next()){//不断指向下一条记录
                System.out.println("DeptNo:"+rs.getInt(1));
                System.out.println("\tDeptName:"+rs.getString(2));
                System.out.println("\tLOC:"+rs.getString(3));
    }         
        rs.close();
        stmt.close();
        conn.close();
    }catch(ClassNotFoundException e){
       System.out.println("找不到指定的驱动程序类!");
    }catch(SQLException e){
        e.printStackTrace();
    }

    //通过系统的属性设置
    try{
           System.setProperty("jdbc.driver","com.mysql.jdbc.Driver");//系统属性指定数据库驱动
           String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议
           Connection conn=DriverManager.getConnection(url,"username","password");
           Statement stmt=conn.createStatement();
           ResultSet rs=stmt.executeQuery("select * from tablename");
           while(rs.next()){//不断指向下一条记录
                System.out.println("DeptNo:"+rs.getInt(1));
                System.out.println("\tDeptName:"+rs.getString(2));
                System.out.println("\tLOC:"+rs.getString(3));
    }         
        rs.close();
        stmt.close();
        conn.close();
    }catch(SQLException e){
        e.printStackTrace();
    }

    //看起来比较直观的一种方式,注册相应的db的jdbc驱动,3在编译时需要导入对应的lib
    try{
           new com.mysql.jdbc.Driver();//创建driver对象,加载数据库驱动
           String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议
           Connection conn=DriverManager.getConnection(url,"username","password");
           Statement stmt=conn.createStatement();
           ResultSet rs=stmt.executeQuery("select * from tablename");
           while(rs.next()){//不断指向下一条记录
                System.out.println("DeptNo:"+rs.getInt(1));
                System.out.println("\tDeptName:"+rs.getString(2));
                System.out.println("\tLOC:"+rs.getString(3));
    }         
        rs.close();
        stmt.close();
        conn.close();
    }catch(SQLException e){
        e.printStackTrace();
    }


    转载于:https://my.oschina.net/u/1765238/blog/289893

    展开全文
  • H2是一个Java编写的关系型数据库,它可以被嵌入Java应用程序中使用,或者作为一个单独的数据库服务器运行。
  • access数据库驱动的安装方法

    千次阅读 2021-01-07 14:01:07
    是微软的64位Access2010数据库引擎可再发行程序包。 运行软件提示错误 :未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 ,那么就需要安装这个软件了。 本程序的作用在于使得在office系统文件与office应用程序之间...

    AccessDatabaseEngine_X64.exe

    是微软的64位Access2010数据库引擎可再发行程序包。

    运行软件提示错误 :未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 ,那么就需要安装这个软件了。
    本程序的作用在于使得在office系统文件与office应用程序之间进行数据传输。

    关于安装AccessDatabaseEngine_x64.exe 的说明

    开始--运行中 输入 cmd 进入界面

     

    再输入路径 C:\Users\xiao\Downloads\AccessDatabaseEngine_X64.exe /passive


    即完成安装。

    注意,路径要改成你自己的文件存放路径,上图只是参考例子。

    2、查看注册表 在开始--运行中打入 regedit 回车

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths,删除mso.dll 即可完成

    展开全文
  • Sybase数据库连接驱动 1)ADO.NET、ODBC驱动来自于Sybase ASE 16 发布时间2014年4月 2)OLEDB来自于Sybase ASE 15.5(SYBASE ASE 16中未提供OLE方式) 3)charsets、locales两个文件夹是为了解决字符集转换的问题,需...
  • 文章目录驱动下载导入包与IDEA配置Java连接数据库JDBC Connection注册驱动Class.forName注册实现建立连接查询、获取结果连接数据库测试完 驱动下载 Java连接MySQL需要下载驱动jar包 MySQL :: Download Connector/J ...
  • 加载驱动:连接不同的数据库要加载不同的驱动;建立连接:访问一个数据库,要知道IP+端口号+数据库名,此外还有用户名和密码;声明要求:将sql语句传送给数据库服务器;执行:执行sql语句返回结果集;关闭:断开连接...
  • JDBC数据库驱动及原理

    万次阅读 多人点赞 2019-04-20 13:18:20
    JDBC即Java DataBase Connectivity,java数据库连接;JDBC 提供的API可以让JAVA通过API方式访问关系型数据库,执行SQL语句,获取数据;常见关系型数据库如Oracle、MySQL、SQLServer等;对于非关系型数据库如Redis、...
  • mysql注册驱动的三种方式

    千次阅读 2017-09-17 20:00:17
    1:Class.forName("com.mysql.jdbc.Driver"); 2:DriverManager.registerDriver(new Driver()); 3:System.setProperty("jdbc:drivers", "com.mysql.jdbc.Driver");
  • 驱动程序通过 spi 自动注册,手动加载驱动程序类通常是不必要的。 错误: spring.datasource.driver-class-name: com.mysql.jdbc.Driver 正确: spring.datasource.driver-class-name: ...
  • JDBC-注册数据库驱动

    千次阅读 2016-02-22 11:31:10
    DriverManager里就有注册了这个数据库驱动呢?  这是因为,我们在思考 注册数据库驱动 的时候,总是想着我们自己去注册,如果没有显式的去做,就不自在。 这还是因为没有一个OO的思想。  其实呢,注册...
  • 注册驱动并建立数据库的连接

    千次阅读 2017-09-27 18:21:32
    数据库进行查询、添加、删除、修改等操作时,都必须通过JDBC建立...实现注册驱动并建立数据库的连接的关键代码段如下:  String driveName=“com.mysql.jdbc.Driver”;  String userName ="root";  String use
  • #oracle driverClassName = oracle.jdbc.OracleDriver url = jdbc:oracle:thin:@127.0.0.1:1521:orcl username = scott password = tiger #验证使用的SQL语句 validationQuery=SELECT 'x' FROM DUAL ...
  • JDBC之数据库驱动程序

    2019-08-27 09:39:10
    前言:学习Java时间也算不短了 ,但是每次学到数据库操作部分,都要重新去学习如何加载驱动程序,如何获取连接,如何执行sql语句,如何处理结果。每次都是处于”点到即止“的水平,没有去深入理解,为什么要去加载...
  • 数据库连接驱动版本过高问题

    千次阅读 2019-02-26 14:44:45
    在进行mysql数据库连接的过程中,如果因mysql驱动版本过高,在进行操作 的时候出现以下问题.可以降低数据库驱动版本来进行处理解决。 2019-02-26 14:35:19.254 INFO 668 --- [ main] c.e.s....
  • 首先要导入JDBC的jar包;接下来,代码:Class.forName...JDBC连接数据库• 创建一个以JDBC连接数据库的程序,包含7个步骤:1、加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库驱动到JVM(java虚拟...
  • 1.报错异常程序中连接mysql数据库时,常常会出现如下异常:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.Access...
  • 1.JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具...
  • java规范怎么加载数据库驱动

    千次阅读 2019-09-17 09:46:58
    class.forName与类加载机制有关,会触发执行com.mysql.jdbc.Driver类中的静态方法,从而使主类加载数据库驱动。 但是在最新的DriverManager源码中,可以不需要使用class.forName显示加载JDBC驱动程序,加了也没有...
  • java连接mysql数据库数据库程序开发步骤首先就要加载JDBC驱动程序,不同版本的mysql数据库需要的MySQL数据库驱动程序jar包版本也不同。不少同学问怎么下载java连接mysql的驱动jar包?今天给大家分享:各版本MySQL...
  • 我们再使用jdbc操作数据库时,一般会先注册驱动,常用的方法就是使用Class.forName("com.mysql.jdbc.Driver")进行驱动的加载,但是最近却发现不需要使用Class.forName()注册数据库的驱动也能正常使用。...
  • 之前习惯的配置方式: ... 驱动程序通过SPI(服务提供接口)自动注册,通常不需要手动加载驱动程序类。   意思就是对于现在的搞版本springboot mysql数据库驱动不需要配置 微信公众号    
  • JDBC概念和数据库驱动程序

    千次阅读 2018-05-10 00:18:29
    01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API, 可以为多种关系数据库提供统一访问,它由...
  • 该文档详细地介绍了java变成中怎么样连接各种数据库,包括mysql,sqlserver2005,oracle,Access,Sybase

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 130,416
精华内容 52,166
关键字:

数据库注册驱动

友情链接: day21_2_pay-master.zip