Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要一些关于使用Javaservlet访问mysql的指导_Java_Mysql_Servlets - Fatal编程技术网

我需要一些关于使用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