Невозможно соединить базу данных MYSQL, используя JSP и TOMCAT - PullRequest
2 голосов
/ 15 августа 2010

Мне не удается подключить «тест» базы данных, созданный в mySQL, с помощью Java Server Pages (JSP) и 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

В настоящее время я подключен к mySQL Server 5.1, используя имя пользователя по умолчанию ‘root’ и ‘password sohail’ В настоящее время «test» выбрана база данных

я запускаю следующий код

<%@ 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 ]

2 голосов
/ 15 августа 2010
Parameter index out of range (1 > number of parameters, which is 0)

Это означает, что preparedStatement.setSomething(1, something) не удалось, потому что 1 больше доступного количества параметров, которое составляет 0.

con.prepareStatement ("INSERT INTO login (loginID, имя, фамилия, пол, день рождения, страна, адрес электронной почты)) VALUES ('?', '?', '?', '?','?', '?', '?') "

Вы должны удалить эти одинарные кавычки. Не нужно их включать. PreparedStatement позаботится о правильном способе цитированияЗаполнители ? следует использовать без кавычек. Итак:

con.prepareStatement ("INSERT INTO login (loginID, имя, фамилия, пол, день рождения, страна, emailAddress) VALUES (?,?,?,?,?,?,?) "

См. Также:


Тем не менее, это не рекомендуемый способ использования JDBC и JSP. Java-код должен быть исключен в JSP. Кроме того, переменная окружения CLASSPATH равна игнорируется от Tomcat.

1 голос
/ 15 августа 2010

Не указывайте параметры. Используйте

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

Ваш код также устанавливает параметр №. 6 дважды.

0 голосов
/ 15 августа 2010

Этот код причиняет мне боль.

Код сценария, подобный этому, - неправильный путь.

Если вы должны поместить это в JSP, вы должны использовать теги JSTL <sql>.

Но даже это плохая идея.У вас есть вся информация о подключении в виде простого текста на странице.Вы не используете пул соединений или поиск JNDI.Вы говорите «тестовая страница» - не позволяйте этому идти в производство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...