java - 如何将 mysql-connector-driver 与 jsp 一起使用

标签 java mysql jsp mysql-connector

我需要使用 JSP 创建登录,因此我需要使用 mysql-connector-java .

我插入文件 jar:mysql-connector-java-5.1.38-bin.jar进入WEB-INF/lib

我在 jsp 文件中使用了这段代码:

<%@ 
        page import="java.sql.*"
    %>

<%
    String DRIVER = "com.mysql.jdbc.Driver";
    String URL_mioDB = "jdbc:mysql://localhost:3306/ditta";

    try
    {
       Class.forName(DRIVER);
    } 
    catch (ClassNotFoundException e) 
    {
       System.err.println("Driver not found" + e);
    } 

    Connection connessione = null;
    try
    {
       // apro la connesione verso il database.
       connessione = DriverManager.getConnection(URL_mioDB,"root","");
    } 
    catch (Exception e)
    {
       System.err.println("Error during connection with db : " + e);
    } 

    String mail="",pass="",send="",query="";

    try
    {
        mail=request.getParameter("email");
        pass=request.getParameter("password");
        send=request.getParameter("send");

        out.println("<FORM name='F1' method='post' action='login.jsp'>");
            out.println("Email: <INPUT type='text' name='email' value='' placeholder='mariorossi@gmail.com'><BR><BR>");
            out.println("Password: <INPUT type='password' name='password' value=''><BR><BR>");
            out.println("<INPUT type='submit' name='send' value='Invia'>&nbsp;&nbsp;&nbsp;&nbsp;<INPUT type='reset' name='reset' value='Reset'>");
        out.println("</FORM>");
    }
    catch (Exception e)
    {
       System.err.println(e);  
    } 

    if(send!=null && mail!="" && pass!="")
    {
        query="SELECT * FROM dipendenti WHERE email="+ mail + " AND password=" + pass + "";

        Statement statement = connessione.createStatement();
        ResultSet resultSet = statement.executeQuery(query);
        ResultSetMetaData rsmd = resultSet.getMetaData();

        for(int i=0;i<=rsmd.getColumnCount();i++)
        {
            out.println(resultSet.getString(i));
            }
    }

%>

之后,当我单击发送按钮时,页面给出以下错误:

errors image

最佳答案

这里猜测一下...

我猜这可能与如何将参数值传递到查询中有关。因此,如果邮件是“a@a.com”并且密码是“a”,那么您的查询最终将是:

SELECT * FROM dipendenti WHERE email=a@a.com AND password=a

这不是正确的 SQL。您缺少引号/撇号。我会尝试达到这样的查询:

SELECT * FROM dipendenti WHERE email='a@a.com' AND password='a'

这需要对定义方式进行简单的更改

query=...
<小时/>

同时,我知道这不是您在这里问的问题,但我强烈建议您阅读 SQL Injection on Wikipedia 。您在这里所做的并不是接受用户输入到后端程序并最终进入数据库的正确方法。

对于这个非常具体的用例,JDBC(和数据库)有一个准备好的语句的概念: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

所以你会从类似的东西开始:

    // not tested
    query="SELECT * FROM dipendenti WHERE email=? AND password=?";
    PreparedStatement statement = connessione.prepareStatement(query);

    statement.setString(1, mail);
    statement.setString(2, pass);

    ResultSet resultSet = statement.executeQuery();

关于java - 如何将 mysql-connector-driver 与 jsp 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873441/

相关文章:

java - 是否可以在不使用其他库的情况下连接到 SFTP 存储库?

java抛出不可能的NullPointerException

mysql - 如何在单个 mysql 命令中删除此选择查询的结果?

jsp - Tomcat 8 JSP 应用程序不加载在 WEB-INF/LIB 文件夹中复制的外部 jar 文件

mysql - GROUP BY 子句中整数的含义

mysql - 在 MySQL 中将 BLOB 转换为 UTF-8

java - 当用户通过搜索引擎请求 jsp 时是否调用 struts2 操作

java - if/else 语句不触发

java - 用bfs搜索

java - 连接到 Coherence 集群的方法