服务器使用我在代码中甚至没有提到的表

时间:2014-04-06 14:40:10

标签: java mysql sql

我正在使用NetBeans 8.0。我在数据库“face”中创建了一个“full”表。早些时候,我在数据库“rishi”中创建了一个表“学生”。现在,从数据库“rishi”&删除表后在将数据库更改为“full”之后,我收到以下错误: -

  

java.sql.SQLException:来自服务器的基表或视图未找到消息:“表'face.student'不存在”。

这是我的HTML代码: -

<html>
<head>
    <title>TODO supply a title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <center>
        <h1>Login !</h1>
        <hr>
        <form action = "Check" method = "post">
            <pre>
                Enter email :     <input type = "text" name = "email">
                Enter password :  <input type = "password" name = "pass">
                <input type = "submit" value = "Login">
            </pre>
        </form>
        <hr>
        <h3>New ? Sign in today !</h3>
        <form action = "New" method = "post">
            <pre>
                Enter name :        <input type = "text" name = "user">
                Enter email :       <input type = "text" name = "newEmail">
                Enter password :    <input type="password" name = "newPass">
                Re-enter password : <input type="password" name = "repass">
                                    <input type = "submit" value = "Sign Up">
            </pre>
        </form>
    </center>
</body>
</html>

这是我的Servlet: -

public class New extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        String name = request.getParameter("user");
        String email = request.getParameter("newEmail");
        String pass = request.getParameter("newPass");
        String repass = request.getParameter("repass");

        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/face" , "root" , "root");
            Statement st = con.createStatement();
            ResultSet r = st.executeQuery("select * from full");
            int flag = 0;

        while(r.next()) {
            String s = r.getString(2);
            if(pass.equals(repass) || email.equals(s)) {
                flag = 1;
            }
            else {
                flag = 2;
            }

            if(flag == 2) {
                response.sendRedirect("fail2.html");
            }
            else {
                String qr = String.format("insert into student values('%s','%s','%s')" , name , email , pass);
                st.executeUpdate(qr);
                response.sendRedirect("home.html");
            }
        }

        catch (ClassNotFoundException ex) {
            out.println("Cannot load driver !");
        } catch (SQLException ex) {
            out.println(ex);
        }       
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       doGet(request,response);
    } 
}

可能出现什么问题?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

抱歉我的不好 - 只是重新阅读问题..实际上你的数据库连接很好,因为你还有数据库face

问题在于您的Insert语句 - 您正在尝试将数据插入到数据库中不存在的表中。

String qr = String.format("insert into student values('%s','%s','%s')" , name , email , pass);

这就是问题所在 - 所以要么你必须在那个&#34;新&#34;中制作一个表student。数据库,或将其更改为db。中存在的内容。

String qr = String.format("insert into " insert valid table name here "values('%s','%s','%s')" , name , email , pass);

但我想解决不同的问题 - 我不明白你为什么这么做?

if(pass.equals(repass) || email.equals(s)) {
    flag = 1;
}
else {
    flag = 2;
}
if(flag == 2) {
    response.sendRedirect("fail2.html");
}
else {
    String qr = String.format("insert into student values('%s','%s','%s')" , name , email , pass);
    st.executeUpdate(qr);
    response.sendRedirect("home.html");
}

这个区块似乎(对我来说)裁员,因为你检查是否知道凭证如果他们将旗帜设置为1 - 到目前为止这么好,但是如果他们没有设置标志为2.这也很好 - 但为什么你有另一个if语句检查标志是否为2?如果你重定向到fail.html。否则你做一些查询...它的冗余(除非你期望超过2个标志)如果你不要,那么下面这个块是一个更好的解决方案

if(pass.equals(repass) || email.equals(s)) {
    String qr = String.format("insert into student values('%s','%s','%s')" , name , email , pass);
    st.executeUpdate(qr);
    response.sendRedirect("home.html");
}
else {
    response.sendRedirect("fail2.html");
}

答案 1 :(得分:0)

错误:

DriverManager.getConnection("jdbc:mysql://localhost:3306/face" , "root" , "root");

因此,您正在连接到face数据库。

然后

insert into student values('%s','%s','%s')

所以,是的,您的代码尝试访问face.student表。