数据库有一个username属性,我是想用rs.next(); name = rs.getString("username");来获取username的值,
要注意,当查询到了数据之后才能这样获取到值,如果没有查询到值的话,执行name = rs.getString("username");会出错。这个语句后面的语句就执行不了了,
调试的时候可以用System.out.printIn();语句来进行调试,根据这个语句在哪一行可以输出,在哪一行输出不了,这样就可以判断出错误的位置。它输出的位置是在Console。
所以要使用这个语句之前需要对rs.next()进行判断,用if(rs.next()),或者while(rs.next())等都行;
package com.servlets;
import java.io.Console;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javafx.scene.control.Alert;
/**
* Servlet implementation class RegisterValidate
*/
@WebServlet("/RegisterValidate")
public class RegisterValidate extends HttpServlet {
private static final long serialVersionUID = 1L;
// JDBC 驱动名及数据库 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8";
// 数据库的用户名与密码,需要根据自己的设置
static final String USER = "root";
static final String PASS = "123456";
/**
* @see HttpServlet#HttpServlet()
*/
public RegisterValidate() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Connection conn = null;
PreparedStatement stmt = null;
//解决中文乱码
response.setContentType("text/html;charset=utf-8");
//请求解决乱码
request.setCharacterEncoding("utf-8");
//响应解决乱码
response.setCharacterEncoding("utf-8");
String usname = request.getParameter("username");
String pword = request.getParameter("password");
PrintWriter out = response.getWriter();
try{
// 注册 JDBC 驱动器
Class.forName("com.mysql.jdbc.Driver");
// 打开一个连接
conn = DriverManager.getConnection(DB_URL,USER,PASS);
String sql;
sql = "SELECT username,password FROM user where username=?";
// 执行 SQL 查询
stmt = conn.prepareStatement(sql);
stmt.setString(1, usname);
ResultSet rs = stmt.executeQuery();
//原来我是这样做的,一直出错,找了半天才找出错误
// 展开结果集数据库
// while(rs.next()){
// 通过字段检索
// String name = (String)rs.getString("username");
// String pwd = (String)rs.getString("password");
// if(usname.equals(name))
// {
// request.getRequestDispatcher("registerfail.jsp").forward(request,response);
// }
// else
// {
// //插入数据
// String sql1;
// sql1 = "insert into user(username,password) values(?,?) ";
// PreparedStatement stmt1 = conn.prepareStatement(sql1);
//// stmt1.setInt(1, 3);
// stmt1.setString(1, usname);
// stmt1.setString(, pword);
// int i = stmt1.executeUpdate();
// request.getRequestDispatcher("registerSuccess.jsp").forward(request,response);
// }
if(rs.next())
{
request.getRequestDispatcher("registerfail.jsp").forward(request,response);
}
else
{
//插入数据
String sql1;
sql1 = "insert into user(username,password) values(?,?) ";
stmt = conn.prepareStatement(sql1);
stmt.setString(1, usname);
stmt.setString(2, pword);
int i = stmt.executeUpdate();
request.getRequestDispatcher("registerSuccess.jsp").forward(request,response);
}
// }
// 完成后关闭
rs.close();
stmt.close();
conn.close();
} catch(SQLException se) {
// 处理 JDBC 错误
se.printStackTrace();
} catch(Exception e) {
// 处理 Class.forName 错误
e.printStackTrace();
}finally{
// 最后是用于关闭资源的块
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
}