我在SQL中创建了一个带有字段用户名的表寄存器。在用户输入用户名的JFrame中,有一个用于检查用户名可用性的JButton。为此,我使用了以下代码:
String sqlstmt = "select username from register where username='" +
jTextField1.getText() + "'";
try {
st = con.prepareStatement(sqlstmt);
stmt = con.createStatement();
rs = st.executeQuery(sqlstmt);
if (rs.next()) {
JOptionPane.showMessageDialog(null,"found");
} else {
JOptionPane.showMessageDialog(null,"not found");
}
} catch(SQLException e) {
JOptionPane.showMessageDialog(null,"sql error");
}
执行此查询时,可以看到数据为空。或者,如果我将rs.getString("username")
放在if (rs.next)
内,则会显示“sql error”消息。
答案 0 :(得分:0)
你在这里混合了Statement
和PreparedStatement
。
这里最好的方法可能是使用PreparedStatement
,它会处理输入中的任何时髦字符,并提供防止SQL注入的保护:
// SQL statement to prepare.
// Note the lack of single quotes (') in the parameter
String sqlstmt= "select username from register where username = ?";
// Prepare the statement
PreparedStatement st = con.prepareStatement(sqlstmt);
// Bind the argument
st.setString(1, jTextField1.getText());
// Execute
ResultSet rs = st.executeQuery();
// Rest of the code to handle results...
注意:强>
此示例省略了错误处理(例如,try-catch构造),有利于清晰。