1

我现在在 JSP 中使用 JDBC 时遇到一些问题。我正在尝试将用户名/传递 ext 插入我的 MySQL 数据库。我没有收到任何错误或异常,但是也没有将任何内容插入到我的数据库中。以下是我的代码,任何帮助将不胜感激。

<%
String uname=request.getParameter("userName");
String pword=request.getParameter("passWord");
String fname=request.getParameter("firstName");
String lname=request.getParameter("lastName");
String email=request.getParameter("emailAddress");
%>


<%
try{
    String dbURL = "jdbc:mysql:localhost:3306/assi1";
    String user = "root";
    String pwd = "password";
    String driver = "com.mysql.jdbc.Driver";

    String query = "USE Users"+"INSERT INTO User (UserName, UserPass, FirstName, LastName, EmailAddress) " +
                   "VALUES ('"+uname+"','"+pword+"','"+fname+"','"+lname+"','"+email+"')";
    Class.forName(driver);
    Connection conn = DriverManager.getConnection(dbURL, user, pwd);
    Statement statement = conn.createStatement();
    statement.executeUpdate(query);

    out.println("Data is successfully inserted!");
    }
    catch(SQLException e){
    for (Throwable t : e)
        t.printStackTrace();
    }
       %>

数据库脚本在这里:

CREATE DATABASE Users;

use Users;

CREATE TABLE User (
UserID INT NOT NULL AUTO_INCREMENT,
UserName VARCHAR(20),
UserPass VARCHAR(20),
FirstName VARCHAR(30),
LastName VARCHAR(35),
EmailAddress VARCHAR(50),
PRIMARY KEY (UserID)
);
4

1 回答 1

2

首先,您不需要USE在 SQL 中使用该语句,因为已经在连接 URL 中选择了数据库。即使您使用该USE语句,也不应将其粘在该INSERT语句上。因此,在您的 dbURL 中,您需要设置适当的数据库:

String dbURL = "jdbc:mysql://localhost:3306/Users";

请注意,您的网址也是错误的。在第二个冒号字符之后需要两个斜线。您需要将查询变量更改为:

String query = "INSERT INTO User (UserName, UserPass, FirstName, LastName, EmailAddress) " + 
               "VALUES ('"+uname+"','"+pword+"','"+fname+"','"+lname+"','"+email+"')";

我希望您的代码处于这种状态,因为您开始学习 Java Web 开发(我看到了 homework 标签)。在现实世界中,这不是开发 Java Web 应用程序的方式,因为不再使用 scriptlet(<%and%>和其他变体之间的代码),并且需要改进许多其他事情,就像您处理 JDBC 的方式一样。

编辑:这是您的固定代码:

<%
    Connection conn = null;

    try {

        String uname=request.getParameter("userName");
        String pword=request.getParameter("passWord");
        String fname=request.getParameter("firstName");
        String lname=request.getParameter("lastName");
        String email=request.getParameter("emailAddress");

        String dbURL = "jdbc:mysql://localhost:3306/Users";
        String user = "root";
        String pwd = "password";
        String driver = "com.mysql.jdbc.Driver";

        String query = "INSERT INTO User (UserName, UserPass, FirstName, LastName, EmailAddress) " +
                       "VALUES ('"+uname+"','"+pword+"','"+fname+"','"+lname+"','"+email+"')";
        Class.forName(driver);
        conn = DriverManager.getConnection(dbURL, user, pwd);
        Statement statement = conn.createStatement();
        statement.executeUpdate(query);
        statement.close();

        out.println("Data is successfully inserted!");

    } catch( ClassNotFoundException e ){
        System.err.println( "Database Driver class not Found!" );
        e.printStackTrace();
    } catch( SQLException e ){
        e.printStackTrace();
    } finnaly {
        try {
            if ( conn != null ) {
                conn.close();
            }
        } catch ( SQLException e ) {
            System.err.println( "Problems when closing connection" );
            e.printStackTrace();
        }
    }
%>

我认为这会奏效。正如 Lion 所说,考虑在您的数据库代码中使用更好的解决方案。我想你的老师很快就会教这些其他的东西。

于 2012-08-17T02:22:04.303 回答