使用netbeans与jsp连接mysql

时间:2013-04-18 09:17:01

标签: mysql jsp servlets

我正在使用NetBeans 7.0.1 IDE进行JSP / servlet 我正在尝试为我的项目建立数据库连接。已经下载了jar文件'mysql-connector-java-5.1.24-bin.jar'粘贴到jdk的jre / lib目录,也将它添加到我的netbean项目库目录中。  然后我创建了一个servlet并编写了以下代码:

import java.sql.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class tstJDBC extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    try{
    String dbURL = "jdbc:mysql://localhost:3306/murach";

         String username="root";
         String password="1234";

         Connection con2 = DriverManager.getConnection(dbURL, username, password);
          String query = "insert into tblUser1(firstname) values('shaon')";

          Statement statmnt = con2.createStatement();
          statmnt.executeUpdate(query);
    }

    catch(SQLException e)
    {
        e.printStackTrace();
    }
}

}

但它可以建立连接。从连接con2行,它直接进入catch()块;不执行查询。

2 个答案:

答案 0 :(得分:0)

尝试在使用DriverManager类之前加载驱动程序。

try{
     String dbURL = "jdbc:mysql://localhost:3306/murach";

     String username="root";
     String password="1234";


     Class.forName("com.mysql.jdbc.Driver");//load driver

     Connection con2 = DriverManager.getConnection(dbURL, username, password);
     String query = "insert into tblUser1(firstname) values('shaon')";

     Statement statmnt = con2.createStatement();
     statmnt.executeUpdate(query);
}

来自O'Reilly:

  

在使用驱动程序之前,必须在JDBC中注册   DriverManager的。这通常通过加载驱动程序类来完成   使用Class.forName()方法:

这是必需的,因为您已将库放在JDK / lib文件夹中,我假设该文件夹是使用与应用程序使用的ClassLoader不同的ClassLoader加载的。由于使用了不同的类加载器,JDBC 4.0+驱动程序发生的自动注册将不会生效。您可以尝试将驱动程序jar文件放在应用程序服务器的lib中,该文件应使用应用程序的相同ClassLoader。请参阅:When is Class.forName needed when connecting to a database via JDBC in a web app?

关于自动注册

  

在JDBC 4.0中,我们不再需要使用显式加载JDBC驱动程序   的Class.forName()。当调用方法getConnection时,   DriverManager将尝试从中找到合适的驱动程序   初始化时加载的JDBC驱动程序和加载的驱动程序   显式使用与当前应用程序相同的类加载器。

     

DriverManager方法getConnection和getDrivers一直是   增强以支持Java SE服务提供程序机制(SPM)。   根据SPM,服务被定义为众所周知的一组   接口和抽象类,以及服务提供者是特定的   实施服务。它还指定了该服务   提供程序配置文件存储在META-INF / services中   目录。 JDBC 4.0驱动程序必须包含该文件   META-INF /服务/ java.sql.Driver中。该文件包含的名称   JDBC驱动程序的java.sql.Driver实现。例如,要加载   用于连接Apache Derby数据库的JDBC驱动程序   META-INF / services / java.sql.Driver文件将包含以下内容   项:

     

org.apache.derby.jdbc.EmbeddedDriver

     

让我们快速了解一下如何使用这个新功能来加载   JDBC驱动程序管理器以下清单显示了示例代码   我们通常用来加载JDBC驱动程序。我们假设我们需要   连接到Apache Derby数据库,因为我们将使用它   示例应用程序在文章后面解释:

Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection conn =
    DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword);
     

但是在JDBC 4.0中,我们不需要Class.forName()行。我们可以简单   调用getConnection()来获取数据库连接。

Source

关于服务加载程序

  

出于加载目的,服务由单个表示   type,即单个接口或抽象类。 (一个具体的课程   可以使用,但不建议这样做。)给定的提供者   service包含一个或多个扩展此服务的具体类   输入特定于提供者的数据和代码。提供者类   通常不是整个提供者本身,而是一个代理   包含足够的信息来决定提供者是否能够   满足特定请求以及可以创建的代码   实际的供应商按需。提供者类的细节往往是   高度服务;没有单个类或接口可能   统一它们,所以这里没有定义这种类型。唯一的要求   该工具强制执行的是提供者类必须具有   零参数构造函数,以便它们可以在实例化期间实例化   负荷。

     

通过放置提供者配置来标识服务提供者   资源目录META-INF / services中的文件。该文件的名称是   服务类型的完全限定二进制名称。文件   包含具体提供程序的完全限定二进制名称列表   班级,每行一班。每个名称周围的空格和制表符,   以及空行,都会被忽略。评论字符是'#'   ('\ u0023',NUMBER SIGN);在每一行上的所有字符   第一个评论字符被忽略。该文件必须编码   UTF-8。

     

如果在多个中指定了特定的具体提供程序类   配置文件,或者在同一配置文件中命名的更多   而不是一次,然后忽略重复。配置文件   命名特定提供者不必在同一个jar文件或其他文件中   分配单位作为提供者本身。提供者必须是   可以从最初查询到的同一个类加载器访问   找到配置文件;请注意,这不一定是   实际加载文件的类加载器。

Source

答案 1 :(得分:0)

将“mysql-connector-java”保留在“C:\ Program Files \ Java \ jdk1.7.0_25 \ jre \ lib \ ext”中  “jdk1.7.0_25”是我的jdk版本可能你有不同的版本,但必须有子文件夹“\ jre \ lib \ ext”。