我想请求帮助我的代码,根据身份证号码从数据库中找到相关名称。
我的代码找到了我试图找到的名称。
但我想在程序找不到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"));
}
}
答案 0 :(得分:1)
您的代码存在两个大问题:
您不会在ID
周围放置SQL引号,因此它看起来像是SQL解析器的关键字或标识符
全开到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注入链接:http://bobby-tables.com/
卡通:
答案 1 :(得分:0)
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");
}
}