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

Posted

技术标签:

【中文标题】Class.forName("com.mysql.jdbc.Driver").newInstance()【英文标题】: 【发布时间】:2013-10-25 01:58:16 【问题描述】:

我在 Netbeans 7.2 上遇到此错误,它表示 ClassNotFoundexception 和 InstantationException。我真的被这件事困住了。请帮助我。

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    try 
        String driver = "com.mysql.jdbc.Driver";
        con = null;
        String username = "";
        String password = "";

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

        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName", "root", "password");
        Statement st = con.createStatement();
        ResultSet mar = st.executeQuery("SELECT * FROM table");


        Gson gson = new GsonBuilder().create();
        response.setContentType("application/json");  
        response.setCharacterEncoding("utf-8"); 

     catch (SQLException e) 
                String message = e.getMessage();
    

【问题讨论】:

首先,您不需要.newInstance() 电话。其次,您是否将mysql-connector.jar 添加到您的WEB-INF/lib 以便将其添加到类路径中? 为什么 .newInstance() ???? 第三,你也不需要 .forName() 调用。您的问题所剩无几。 【参考方案1】:

这个简单的方法怎么样?!

java.sql.Driver d=new com.mysql.jdbc.Driver();

我也想知道你为什么用这种方式连接数据库?!最好让服务器管理。

首先像这样配置context.xml(如果您使用的是tomcat):

<context>
<Resource name="_ds" auth="Container" type="javax.sql.DataSource"
               maxActive="128" maxIdle="32" username="_admin" password="qwerty" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://127.0.0.1:3306/dbname"/>
</context>

然后,在 servlet/etc 中简单地从该资源获取连接,如下所示:

public void init() 
    try 
        _ds = (DataSource) InitialContext.lookup("java:/comp/env/_ds");
     catch (Exception ex) 
    


private javax.sql.DataSource _ds;

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException

    try 
        /*String driver = "com.mysql.jdbc.Driver";
        con = null;
        String username = "";
        String password = "";

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

        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName", "root", "password");*/
        Connection con=_ds.getConnection();
        Statement st = con.createStatement();
        ResultSet mar = st.executeQuery("SELECT * FROM table");


        Gson gson = new GsonBuilder().create();
        response.setContentType("application/json");  
        response.setCharacterEncoding("utf-8"); 
        con.close();
     catch (SQLException e) 
        String message = e.getMessage();
    

顺便说一句,不要忘记在&lt;CATALINA_BASE&gt;/lib文件夹中编译MySQL JDBC驱动jar文件。

【讨论】:

+1。我喜欢使用真正的构造函数的建议,因为它将丢失的类问题移动到编译时错误而不是运行时。如果可以建议 JNDI 和服务器管理的连接,我会再次 +1。 谢谢伙计,现在我可以继续前进了。:D 欢呼。 java.sql.Driver d=new com.mysql.jdbc.Driver();【参考方案2】:

您需要将在此处找到的mysqlconnector.jar 文件:(http://dev.mysql.com/downloads/connector/j/)添加到项目的 lib 文件夹中。将其包含在您的项目中,然后您就可以访问与数据库的连接。

将该 jar 添加到构建路径中。

【讨论】:

【参考方案3】:

您可能想解决一个更大的问题。您不应该直接在您的 servlet 中输入配置数据,例如数据库连接信息。

你在使用Tomcat吗?您可以简单地使用 JNDI。您将能够更改数据库详细信息和驱动程序,而无需重新编译您的 servlet。

这里是Tomcat 7.0 JNDI Datasource HOW-TO 显示了可以将Connection 获取到数据库的各种方法。

在该页面上,您有一个代码示例,说明如何获取 Connection(Oracle 8i、9i 和 10g -> 第 3 部分)和 how to write a MySQL specific configuration。

确保下载正确的 MySQL jar 并将其放在 Tomcat 的 lib/ 目录中(或者您的 WAR 的 WEB-INF/lib)。

【讨论】:

【参考方案4】:

您只需要Class.forName("com.mysql.jdbc.Driver")

这就像类加载器并为您加载驱动程序类。为此,您需要添加相应的 jar 文件(具有驱动程序实现)。所以下载并在你的类路径中添加mysql-connector.jar

注意:如果您使用的是 Java 7,那么甚至不需要添加 Class.forName("com.mysql.jdbc.Driver") 语句。在 Java 7 中默认提供的 JDBC 4.1 中添加了自动资源管理 (ARM)。

【讨论】:

以上是关于Class.forName("com.mysql.jdbc.Driver").newInstance()的主要内容,如果未能解决你的问题,请参考以下文章

为啥我找不到 Class.forName("com.mysql.jdbc.Driver"); 的异常[复制]

h2 数据库的 ClassNotFound 异常 class.forname("org.h2.Driver")

连接数据库时 Class.forName("oracle.jdbc.driver.OracleDriver") 的实际用途是啥?

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

Class.forName("com.mysql.jdbc.Driver") 没有在 jar 文件中查找该类

Class.forName(Class) 在特定目录中?