Java mysql 喜欢命令

Java mysql like command

我想求助我的代码,它会根据身份证号从数据库中找到相关的名字。

我的代码找到了我试图找到的名字。

但是我想在程序找不到 ID 号码时发送错误消息。

试了很多方法,总是找不到ID号,提示编译成功,没有报错,直接退出程序。

感谢您的帮助。

public void search(String ID) throws SQLException {

    Statement mystate = con.createStatement();

    String sql = "SELECT*FROM users" +
        " WHERE id LIKE " + ID;

    ResultSet rs = mystate.executeQuery(sql);    

    while (rs.next()) {

        System.out.println("Your Name is " + rs.getString("name"));   
    }
}
public void search(String ID) throws SQLException {

    Statement mystate = con.createStatement();

    String sql = "SELECT*FROM users" +
            " WHERE id LIKE " + ID;

    ResultSet rs = mystate.executeQuery(sql);    

    if(rs.next()) {

        System.out.println("Your Name is " + rs.getString("name"));   
    }
    else
    {
        System.out.println("Id not found");   
    }
}

你的代码有两个大问题:

  1. 您没有在 ID 周围加上 SQL 引号,所以它看起来像 SQL 解析器

    [的关键字或标识符
  2. SQL 注入攻击(见下文)

您想使用 PreparedStatement,它可以为您处理这两个问题。然后用一个标志来判断你是否看到了什么:

public void search(String ID) throws SQLException {
    boolean sawOne = false;

    PreparedStatement mystate = con.prepareStatement(
        "SELECT * FROM users WHERE id LIKE ?"
    );
    mystate.setString(1, ID);
    ResultSet rs = mystate.executeQuery(mystate);    

    while (rs.next()) {
        sawOne = true;
        System.out.println("Your Name is " + rs.getString("name"));   
    }
    if (!sawOne) {
        System.out.println("...");
    }
}

我假设 ID 已经有一个通配符(或者你真的不想要)。

或者如果您知道只有一场比赛,或者即使有多场比赛您也只想要一场比赛,您可以添加一个

mystate.setMaxRows(1);

...在 executeQuery() 之前,然后只需使用 if/else,不需要标志:

if (rs.next()) {
    System.out.println("Your Name is " + rs.getString("name"));   
} else {
    System.out.println("...");
}

强制性SQL-注射link:http://bobby-tables.com/

和卡通: