我正在使用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);
}
}
可能出现什么问题?
提前谢谢!
答案 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
表。