无法使用JSP和TOMCAT连接MYSQL数据库

时间:2010-08-15 11:45:31

标签: java mysql jsp tomcat jdbc

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

我正在使用以下软件规范

  • Tomcat 6.0
  • jdk1.6.0_21
  • mySQL 5.1.49
  • MySQL的连接器的Java-5.1.13槽

我已配置以下环境变量,如下所示

  • 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中\分机\ MySQL的连接器的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'和'password'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

3 个答案:

答案 0 :(得分:2)

Parameter index out of range (1 > number of parameters, which is 0)

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

  

con.prepareStatement(“INSERT INTO登录(loginID,名字,姓氏,性别,生日,国家,电子邮件地址)VALUES('?','?','?','?','?','? ”, '?')“

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

  

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

另见:


也就是说,这不是使用JDBC和JSP的推荐方法。 JSP中的Java代码应该是avoided。此外,Tomcat会将CLASSPATH环境变量忽略

答案 1 :(得分:1)

不要引用参数。使用

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

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

答案 2 :(得分:0)

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

像这样的Scriptlet代码是错误的方法。

如果必须将其放在JSP中,则应该使用JSTL <sql>标记。

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