没有为jdbc找到合适的驱动程序:mysql:// localhost / db

时间:2013-02-22 18:47:26

标签: java sql jsp jdbc

我是一名java初学者并尝试在db中插入一行。这是我第一次在java中执行插入操作。约2小时,我谷歌搜索和沮丧,无法解决我的错误。我打电话给我的朋友,他在团队查看器中为我提供了实时支持,并在我的程序中添加了一行代码。

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

任何人都可以解释为什么我们需要在连接字符串之前将其包含在我的代码中。是否有必要每次都将我的代码放在那里。请详细解释一下。

4 个答案:

答案 0 :(得分:1)

这是一些非常简化的代码,用于说明驱动程序初始化的工作原理。有3个类,请将每个类放在一个适当命名的文件中。

import java.util.HashMap;
import java.util.Map;

public class DriverMgr {
    private static final Map<String, Class<?>> DRIVER_MAP = new HashMap<String, Class<?>>();

    public static void registerDriver(final String name, final Class<?> cls) {
        DRIVER_MAP.put(name, cls);
    }

    public static Object getDriver(final String name) {
        final Class<?> cls = DRIVER_MAP.get(name);
        if (cls == null) {
            throw new RuntimeException("Driver for " + name + " not found");
        }
        try {
            return cls.newInstance();
        } catch (Exception e) {
            throw new RuntimeException("Driver instantiation failed", e);
        }
    }
}

public class MysqlDriver {
    static {
        // hello, I am a static initializer
        DriverMgr.registerDriver("mysql", MysqlDriver.class);
    }

    @Override
    public String toString() {
        return "I am the mysql driver";
    }
}

public class TestProg {
    public static void main(final String... args) {
        try {
            Class.forName("MysqlDriver"); // try with or without this
        } catch (Exception e) {
            throw new RuntimeException("Oops, failed to initialize the driver");
        }
        System.out.println(DriverMgr.getDriver("mysql"));
    }
}

当您调用Class.forName时,将加载驱动程序类并执行静态初始化程序。然后,它会将驱动程序类注册到驱动程序管理器,以便管理器现在知道它。显然,这只需要做一次。

答案 1 :(得分:0)

是的,每次都必须包括在内。 但你可以使用一种不重复代码的方法。

例如

public void connectToMYSQL(){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yourdatabase","username",""password);
}catch(Exception ex)
{
System.out.println(ex.getMessage());
}

}

在编写任何sql语句之前,只需调用方法

即可
public void insert(String sql)
{
connectToMYSQL();
//.. then do your stuffs 

}

答案 2 :(得分:0)

的Class.forName( “com.mysql.jdbc.Driver”)

必须加载您正在使用的数据库驱动程序。 此行中的forNmae()方法加载mysql数据库的驱动程序。

答案 3 :(得分:0)

基本思想是此操作强制驱动程序类在JDBC的驱动程序管理器中注册。

方法Class.forName(&#34;完全限定类名)用于初始化类的静态字段,并将JDBC驱动程序类(在您的情况下为MySQL驱动程序)加载到您的应用程序。实例化后,它将被DriverManager注册。通过后者,您可以使用Connection connection = DriverManager.getConnection(&#34; jdbc:mysql:// localhost:3306 / databasename&#34;,&#34; login&#34;,&#34; password&#34)创建连接;);,您稍后用它来查询数据库。