jdbc连接数据库第一步是注册驱动毫无疑问的。通常是Class.forName(xxx);但是今天我写了一个小Demo 发现不用注册驱动也能正常运行不知道问什么。
String sql = "insert into "+table+" values (?,?,?,?,?,?,?,?)";
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/t113", "root", "3317");
PreparedStatement stmt =null;
stmt=conn.prepareStatement(sql);
刚开始没有Class.forName(),所以jvm里不太可能存在数据库的驱动类。但是不论是mysql 还是oracle 都可以识别。
开发环境是eclipse+jdk1.6
求大神指教

解决方案 »

  1.   

    你之前有写过Class.forName()这个吧?
    你是后来注释的吧?
      

  2.   

    你肯定之前有写过Class.forName(),
    你是后来注释掉的!驱动加载只要第一次加载的时候存在内存中就行,之后都不需要再次加载了
      

  3.   

    不可能的,你肯定在其他什么地方加载了驱动的class文件,否则不可能的。
    仔细找找肯定能发现的。要么你写个Test类测试呗。肯定会报错的。
      

  4.   

    如果我重启电脑,运行一遍不带forName()的程序,应该会出问题吧?
      

  5.   

    这个是需要驱动支持的。
    而且JDK至少1.6
    =====================================================
    DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件需要包含下面的条目:  my.sql.Driver
     应用程序不再需要使用 Class.forName() 显式地加载 JDBC 驱动程序。当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将在不作修改的情况下继续工作。 在调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。 
      

  6.   

    应该是你写过Connection的,并且楼主还没写关闭
      

  7.   

    jdk1.6的服务加载功能,正常的
    不过为了兼容其他运行环境,最好是写上加载部分
      

  8.   

    是java6以上就可以  可以省去加载驱动这一步
      

  9.   

    楼主可以换1.6版本以下的jdk试试 这是jdk1.6特性 而且貌似jdk1.5以上版本环境变量都不用配 
      

  10.   

    是java6以上就可以 可以省去加载驱动这一步
      

  11.   


    这个特性表示不知道。
    楼主把jar包去掉看看报错不报错。报错那肯定是之前加载过的,然后一直存在与内存中。