【问题标题】:Unable to connect MYSQL database using JSP and TOMCAT无法使用 JSP 和 TOMCAT 连接 MYSQL 数据库
【发布时间】:2011-03-30 01:40:25
【问题描述】:

我无法连接使用 Java Server Pages (JSP) 和 Tomcat 在 mySQL 中创建的数据库“test”。我收到错误消息“无法连接到数据库”。

我正在使用以下软件规格

  • Tomcat 6.0
  • jdk1.6.0_21
  • mySQL 5.1.49
  • mysql-connector-java-5.1.13-bin

我已经配置了以下环境变量如下

  • CATALINA_HOME: C:\Program Files\Tomcat 6.0
  • CLASSPATH: C:\Program Files\Tomcat 6.0\lib\servlet-api.jar;C:\Program Files\Tomcat 6.0\lib\jsp-api.jar;C:\Program Files\Java\jdk1.6.0_21 \jre\lib\ext\mysql-connector-java-5.1.13-bin.jar.;
  • JAVA_HOME:C:\Program Files\Java\jdk1.6.0_21

我已将mysql-connector-java-5.1.13-bin jar 文件放在以下两个位置:

  • CATALINE_HOME\lib
  • C:\Program Files\Tomcat 6.0\webapps\myapp\WEB-INF\lib

我目前使用默认用户名“root”和“密码”sohail 连接到 mySQL Server 5.1 当前选择“测试”数据库

我正在运行以下代码

<%@ page language="java" import="java.sql.*" errorPage=""%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>Test DB Page</title>
</head>
<body>
<h3>Insert Data INTO MYSQL</h3>
<%
Connection con = null;
PreparedStatement stmt = null;
try 
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "sohail");
stmt = con.prepareStatement("INSERT INTO login (loginID, firstname, lastname, gender, birthday, country, emailAddress) VALUES ('?','?','?','?','?','?','?')");
stmt.setString(1, request.getParameter("loginID"));
stmt.setString(2, request.getParameter("firstname"));
stmt.setString(3, request.getParameter("lastname"));
stmt.setString(4, request.getParameter("gender"));
stmt.setString(5, request.getParameter("Date of Birth"));
stmt.setString(6, request.getParameter("Country"));
stmt.setString(6, request.getParameter("emailAddress"));
int num = stmt.executeUpdate();
System.out.println(num + "records updated");
stmt.close();
con.close();
}
            catch (Exception ex) {
            out.println("Unable to connect to batabase.");
            }
 finally {
      try {
        if (stmt != null)
         stmt.close();
        }  
catch (SQLException e) {}
        try {
         if (con != null)
         con.close();
         } 
catch (SQLException e) {}
     }
%>
Done with new DB
</body>
</html>

谁能解释为什么我无法连接数据库?


更新:我收到以下异常:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

谢谢大家

问题已通过修复以下 2 个错误得到解决。

1- 不要引用参数,即?

2- 删除重复,即参数号 6

【问题讨论】:

  • 你得到什么错误信息?
  • 请更改out.println("无法连接到数据库。");打印出异常。编辑您的问题以包含例外情况
  • 不是打印简单的消息,而是使用 ex.toString(); 打印异常详细信息;

标签: java mysql jsp tomcat jdbc


【解决方案1】:
Parameter index out of range (1 > number of parameters, which is 0)

这意味着preparedStatement.setSomething(1, something) 失败,因为1 大于可用的参数数量0

con.prepareStatement("INSERT INTO login (loginID, firstname, lastname, gender,birthday, country, emailAddress) VALUES ('?','?','?','?','?','? ','?')"

您应该删除那些单引号。你不需要包括它们。 PreparedStatement 将注意正确的引用方式。占位符? 应该不加引号使用。所以:

con.prepareStatement("INSERT INTO login (loginID, firstname, lastname, gender,birthday, country, emailAddress) VALUES (?,?,?,?,?,?,?)"

另见:


也就是说,这不是使用 JDBC 或 JSP 的推荐方式。 Java 代码在 JSP 中应为 avoided。此外,CLASSPATH 环境变量被 Tomcat忽略

【讨论】:

    【解决方案2】:

    这段代码伤害了我的眼睛。

    这样的 Scriptlet 代码是错误的。

    如果你必须把它放在 JSP 中,你应该使用 JSTL &lt;sql&gt; 标签。

    但即使这样也是个坏主意。您已经在页面中以纯文本形式获得了所有连接信息。您没有使用连接池或 JNDI 查找。你说“测试页”——不要让它投入生产。

    【讨论】:

      【解决方案3】:

      不要引用参数。使用

      INSERT INTO login (loginID, firstname, lastname, gender, birthday, country, 
          emailAddress)  VALUES (?,?,?,?,?,?,?)");
      

      您的代码还设置了参数号。 6 两次。

      【讨论】:

      • +1 还注意到位置 6 设置了两次。这可能只是错误的原因。
      • @extra:不,异常消息没有说明这一点。反过来会出错。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2011-10-26
      • 2010-12-16
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      相关资源
      最近更新 更多