我需要一些关于使用Javaservlet访问mysql的指导
这是我的密码我需要一些关于使用Javaservlet访问mysql的指导,java,mysql,servlets,Java,Mysql,Servlets,这是我的密码 import java.io.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.sql.*; @WebServlet(name = "Scores", urlPatterns = {"/Scores"}) public class Scores extends HttpServl
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.sql.*;
@WebServlet(name = "Scores", urlPatterns = {"/Scores"})
public class Scores extends HttpServlet{
private Connection conn;
private PreparedStatement psmt;
private ResultSet rs;
private String tableName;
private String ssnNum;
@Override
public void init() throws ServletException {
connect();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try{
tableName = request.getParameter("tableName");
ssnNum = request.getParameter("ssnNum");
rs = psmt.executeQuery();
out.print("\t\t\t");
out.print(rs.getString("Student") + " " + rs.getString("Score"));
out.print("<br>");
out.close();
}catch(Exception e){
System.err.println(e);
}
}
public void connect(){
try{
//Loads Driver
Class.forName("com.mysql.jdbc.Driver");
//Establishes a connection to DataBase Javabook
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/javabook", "root", "password");
psmt = conn.prepareStatement("select Student, Score from " + tableName +
" where ssn = " + ssnNum);
} catch (Exception e){
System.err.println(e);
}//End Try/Catch Block
}
}
import java.io.*;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.*;
导入java.sql.*;
@WebServlet(name=“Scores”,urlPatterns={”/“Scores”})
公共类分数扩展了HttpServlet{
专用连接连接器;
私人编制的psmt报表;
私人结果集;
私有字符串表名;
私有字符串ssnNum;
@凌驾
public void init()引发ServletException{
connect();
}
@凌驾
公共无效数据集(HttpServletRequest请求,HttpServletResponse
响应)抛出ServletException、IOException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
试一试{
tableName=request.getParameter(“tableName”);
ssnNum=request.getParameter(“ssnNum”);
rs=psmt.executeQuery();
out.print(“\t\t\t”);
打印(rs.getString(“学生”)+“”+rs.getString(“分数”));
打印输出(“
”);
out.close();
}捕获(例外e){
系统错误println(e);
}
}
公共void connect(){
试一试{
//加载驱动器
Class.forName(“com.mysql.jdbc.Driver”);
//建立到数据库Javabook的连接
conn=DriverManager.getConnection(
“jdbc:mysql://localhost/javabook“,”根“,”密码“);
psmt=conn.prepareStatement(“选择学生,从”+表格名+
“其中ssn=“+ssnNum”);
}捕获(例外e){
系统错误println(e);
}//结束尝试/捕捉块
}
}
这是html
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TravisMeyersP3</title>
</head>
<body>
Find Your Current Score
<form method = "get" action = "Scores">
<p>Social Security Number <font color = "#FF0000">*</font>
<input type = "text" name = "ssnNum">
</p>
<p>Course Id
<select size = "1" name = "tableName">
<option value = "Cpp">C++</option>
<option value = "AdvJava">Advanced Java</option>
</select>
</p>
<p><input type = "submit" name = "Submit" value = "Submit">
</p>
</body>
</html>
TravisMeyersP3
找到你当前的分数
社会保险号码*
课程Id
C++
高级Java
我正在netbeans中使用apachetomcat7.0.21和javajdk7。servlet应该访问我在mysql中创建的两个表中的一个,并显示用户参数的值。我没有收到任何编译或运行时错误。出于某种原因,servlet在用户提交表单后没有访问mysql并显示结果
首先,我要感谢Ryan Stewart,这位精英绅士和CodeBuzz抽出时间来帮助我。除了上述问题外,我还遇到了sql语法问题。当我在新的PreparedStatement中设置变量tableName和ssnNum时
(PreparedStatement psmt=conn.prepareStatement(“选择学生,从?处得分,SSN=?;”))使用psmt.setString(1,tableName)等。出于某种原因,在准备好的语句中的字符串周围加了单引号。MySQL不喜欢这样,唯一显示错误的地方是tomcat命令窗口。解决了上述问题后,一切都很顺利。再次感谢大家在这方面的帮助 用doGet方法而不是connect方法创建准备好的语句
@Override
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try{
tableName = request.getParameter("tableName");
ssnNum = request.getParameter("ssnNum");
psmt = conn.prepareStatement("select Student, Score from ? where ssn = ?");
psmt.setString(1,tableName);
psmt.setString(2,ssnNum);
rs = psmt.executeQuery();
out.print("\t\t\t");
out.print(rs.getString("Student") + " " + rs.getString("Score"));
out.print("<br>");
out.close();
}catch(Exception e){
System.err.println(e);
}
}
public void connect(){
try{
//Loads Driver
Class.forName("com.mysql.jdbc.Driver");
//Establishes a connection to DataBase Javabook
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/javabook", "root", "password");
} catch (Exception e){
System.err.println(e);
}//End Try/Catch Block
}
@覆盖
公共无效数据集(HttpServletRequest请求,HttpServletResponse
响应)抛出ServletException、IOException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
试一试{
tableName=request.getParameter(“tableName”);
ssnNum=request.getParameter(“ssnNum”);
psmt=conn.prepareStatement(“选择学生,从?中得分,ssn=?”);
psmt.setString(1,表名);
psmt.setString(2,ssnNum);
rs=psmt.executeQuery();
out.print(“\t\t\t”);
打印(rs.getString(“学生”)+“”+rs.getString(“分数”));
打印输出(“
”);
out.close();
}捕获(例外e){
系统错误println(e);
}
}
公共void connect(){
试一试{
//加载驱动器
Class.forName(“com.mysql.jdbc.Driver”);
//建立到数据库Javabook的连接
conn=DriverManager.getConnection(
“jdbc:mysql://localhost/javabook“,”根“,”密码“);
}捕获(例外e){
系统错误println(e);
}//结束尝试/捕捉块
}
`
更好的方法是创建一个负责数据库连接的业务类,并从servlet中使用这个类。
请参见用doGet方法而不是connect方法创建准备好的语句
@Override
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try{
tableName = request.getParameter("tableName");
ssnNum = request.getParameter("ssnNum");
psmt = conn.prepareStatement("select Student, Score from ? where ssn = ?");
psmt.setString(1,tableName);
psmt.setString(2,ssnNum);
rs = psmt.executeQuery();
out.print("\t\t\t");
out.print(rs.getString("Student") + " " + rs.getString("Score"));
out.print("<br>");
out.close();
}catch(Exception e){
System.err.println(e);
}
}
public void connect(){
try{
//Loads Driver
Class.forName("com.mysql.jdbc.Driver");
//Establishes a connection to DataBase Javabook
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/javabook", "root", "password");
} catch (Exception e){
System.err.println(e);
}//End Try/Catch Block
}
@覆盖
公共无效数据集(HttpServletRequest请求,HttpServletResponse
响应)抛出ServletException、IOException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
试一试{
tableName=request.getParameter(“tableName”);
ssnNum=request.getParameter(“ssnNum”);
psmt=conn.prepareStatement(“选择学生,从?中得分,ssn=?”);
psmt.setString(1,表名);
psmt.setString(2,ssnNum);
rs=psmt.executeQuery();
out.print(“\t\t\t”);
打印(rs.getString(“学生”)+“”+rs.getString(“分数”));
打印输出(“
”);
out.close();
}捕获(例外e){
系统错误println(e);
}
}
公共void connect(){
试一试{
//加载驱动器
Class.forName(“com.mysql.jdbc.Driver”);
//建立到数据库Javabook的连接
conn=DriverManager.getConnection(
“jdbc:mysql://localhost/javabook“,”根“,”密码“);
}捕获(例外e){
系统错误println(e);
}//结束尝试/捕捉块
}
`
更好的方法是创建一个负责数据库连接的业务类,并从servlet中使用这个类。
看这是行不通的。在init()上,使用包含字段
tableName
和s的查询创建PreparedStatement