当前位置:编程学习 > JAVA >>

数据库连接问题,包你没见过


package com.samton.shopping.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
private final static String url ="jdbc:mysql://localhost:3306/shopping";
private final static String user ="root";
private final static String password ="101186";
public static Connection conn=null;
public DBUtil(){
try{
Class.forName("com.mysql.jdbc.Driver");//("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
}catch(ClassNotFoundException e){
System.out.println("驱动没有找到!");
}
System.out.println("驱动加载成功!");
}

public static Connection getConnection(){
// String url="jdbc:mysql://localhost:3306/shopping";//"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shopping";
// String user="root";//"sa";
// String password="101186";
try {
// return DriverManager.getConnection(url,user,password);//连接sqlserver数据库
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
Connection conn = DBUtil.getConnection();
System.out.print("连接成功!");
System.out.println(conn);
}
}





上面是我连接数据库的代码,报错如下

java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.samton.shopping.util.DBUtil.getConnection(DBUtil.java:25)
at com.samton.shopping.dao.impl.PlacardDaoImpl.findAll(PlacardDaoImpl.java:223)
at com.samton.shopping.service.impl.PlacardServiceImpl.getAllPlacards(PlacardServiceImpl.java:49)
at com.samton.shopping.servlet.PlacardServlet.listAllPlacard(PlacardServlet.java:196)
at com.samton.shopping.servlet.PlacardServlet.doPost(PlacardServlet.java:56)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.samton.shopping.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.samton.shopping.util.DBUtil.getConnection(DBUtil.java:25)
at com.samton.shopping.dao.impl.PlacardDaoImpl.findAll(PlacardDaoIm

 看这意思好像就是我这句return DriverManager.getConnection(url,user,password)有问题,但真心的看不懂 Java 数据库 MySQL --------------------编程问答-------------------- java.sql.SQLException: No suitable driver这个信息不是有提示吗?没有合适的驱动。数据库驱动包的问题。
  --------------------编程问答-------------------- No suitable driver --------------------编程问答--------------------
引用 1 楼 millennium520 的回复:
java.sql.SQLException: No suitable driver这个信息不是有提示吗?没有合适的驱动。数据库驱动包的问题。
 


我也一直以为是这个问题,但是其他系统也是用的同一个JAR包,都不会报错,并且,也用过MYSQL和SQLSERVER都是一样的问题,求解啊 --------------------编程问答--------------------  楼主你项目中没有jar包  --------------------编程问答-------------------- 驱动包有问题
--------------------编程问答-------------------- 要包括在项目中,,不是单纯的放在lib下 --------------------编程问答-------------------- 个人觉得你写的这个类有问题,既然是在构造函数中实例化的驱动,但是main方法中没有使用构造函数,而是直接使用的静态方法,所以没有找到合适的驱动。
建议:构造函数这段代码使用static块包起来,那么在类调用静态方法时已经初始化了,可以试试

static {
           try{
              Class.forName("com.mysql.jdbc.Driver");//("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
             }catch(ClassNotFoundException e){
                 System.out.println("驱动没有找到!");
           }             
          System.out.println("驱动加载成功!"); 
}
--------------------编程问答-------------------- 有合适的驱动。数据库驱动包的问题。重新导入一个jar --------------------编程问答-------------------- 数据库jar包有问题 --------------------编程问答-------------------- 你直接调用了类的静态方法 你这个类都没初始化 你不new一个DBUtil 构造方法不加载  方法Class.forName("com.mysql.jdbc.Driver");没执行 你到哪里拿到driver --------------------编程问答-------------------- 初步估计是没有注册驱动 --------------------编程问答-------------------- 数据库驱动jar包的问题... --------------------编程问答-------------------- 从官网上下一个mysql jar 包试试 --------------------编程问答-------------------- 20分!而且见过这问题,不好意思,不用给分,88 --------------------编程问答-------------------- 如果是驱动没问题的话,那就是代码写的问题了, 
 public DBUtil(){            try{                Class.forName("com.mysql.jdbc.Driver");//("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动            }catch(ClassNotFoundException e){                System.out.println("驱动没有找到!");            }            System.out.println("驱动加载成功!");        }

这个里面的东西都没有打印出来,是代码写的问题哦. --------------------编程问答-------------------- 要是MYSQL出现这个问题,那肯定是少驱动的JAR包了

SQLSERVER的话,2000和2500的驱动(包.类名称)稍微有个小区别,也容易出现这个错误

建议换个MYSQL.JAR试试 --------------------编程问答-------------------- 是2005。。。不是2500 --------------------编程问答-------------------- 构造方法不是静态的,所以根本就没有加载驱动类。 --------------------编程问答-------------------- 都没初始化啊 --------------------编程问答-------------------- 10楼说的对啊,DBUtil都没实例化 --------------------编程问答-------------------- 嗯,同上 --------------------编程问答-------------------- 你没必要把装载驱动单独写在构造方法中的,根本没有调用 --------------------编程问答-------------------- 貌似一般类实例化的步骤是先类的静态初始化,再实例初始化,最后执行构造方法。
而楼主的main里面直接是调用了DBUtil.getConnection()静态方法,这样DBUtil的楼主定义的构造方法在被调用之前,静态方法就先被调用了,造成驱动没有加载从而发生错误。

P.S.其实我也不太清楚 --------------------编程问答-------------------- 重新 build path 一下 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 23 楼 ps4nanari 的回复:
貌似一般类实例化的步骤是先类的静态初始化,再实例初始化,最后执行构造方法。
而楼主的main里面直接是调用了DBUtil.getConnection()静态方法,这样DBUtil的楼主定义的构造方法在被调用之前,静态方法就先被调用了,造成驱动没有加载从而发生错误。

P.S.其实我也不太清楚


补充一下 静态成员是在程序一开始就加载的,而构造方法里的是在实例化的时候被调用的。楼主是直接使用类的静态方法。所以构造方法里的没被调用。 --------------------编程问答--------------------
引用 7 楼 lvzg_005 的回复:
个人觉得你写的这个类有问题,既然是在构造函数中实例化的驱动,但是main方法中没有使用构造函数,而是直接使用的静态方法,所以没有找到合适的驱动。
建议:构造函数这段代码使用static块包起来,那么在类调用静态方法时已经初始化了,可以试试

static {
           try{
              Class.forName("com.mysql.jdbc.Driver");//("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
             }catch(ClassNotFoundException e){
                 System.out.println("驱动没有找到!");
           }             
          System.out.println("驱动加载成功!"); 
}


这位仁兄说得对,你加载驱动的代码没有被执行 --------------------编程问答-------------------- 把 Class.forName("com.mysql.jdbc.Driver");这句写到getConnection()这个方法里面就可以了。 --------------------编程问答-------------------- 驱动未初始化加载 --------------------编程问答-------------------- 小菜鸟来学习一下 --------------------编程问答-------------------- getConnection改成

         
        public static Connection getConnection(){
//            String url="jdbc:mysql://localhost:3306/shopping";//"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shopping";
//            String user="root";//"sa";
//            String password="101186";
            try{
                Class.forName("com.mysql.jdbc.Driver");//("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动
            }catch(ClassNotFoundException e){
                System.out.println("驱动没有找到!");
            }
            System.out.println("驱动加载成功!");
            try {
//                return DriverManager.getConnection(url,user,password);//连接sqlserver数据库
                return DriverManager.getConnection(url,user,password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
--------------------编程问答-------------------- 你的用户名 密码那儿的写法有问题  在数据库前面加上一个前加了一个databasename
给你一个连接自己去看前几天刚帮一个同事弄了一下http://www.cnblogs.com/cy163/archive/2010/10/06/1844515.html --------------------编程问答--------------------
引用 10 楼 xiuxiu2by 的回复:
你直接调用了类的静态方法 你这个类都没初始化 你不new一个DBUtil 构造方法不加载  方法Class.forName("com.mysql.jdbc.Driver");没执行 你到哪里拿到driver


类都没有初始化,怎么加载构造。 --------------------编程问答-------------------- 不要分数,只想说,麻烦看一下报错信息,然后google一下,不习惯也可以baidu一下 --------------------编程问答-------------------- 应该是数据库包的事
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,