我有这种代码的和平:
String query = "SELECT * FROM utilisateurs WHERE pseudo = '" + pseudo.getText()+ "' AND password = '" + new String(password.getPassword()) + "'";
我的问题是:是不是还有其他方法可以用字符串连接这些变量?
在C#中,我使用方法String.Format()方法:
String query = String.Format("SELECT * FROM utilisateurs WHERE pseudo = '{0}' AND password = '{1}'", pseudo.getText(), new String(password.getPassword()));
答案 0 :(得分:17)
String.format()
可用于格式化字符串,Javadoc。
public static String format(String format, Object... args)
使用指定的格式字符串和参数返回格式化字符串。
但是,在构建SQL查询字符串时,首选方法是使用PreparedStatement
(Javadoc):
使用PreparedStatement
的代码可能如下所示:
final PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM utilisateurs WHERE pseudo = ? AND password = ?");
pstmt.setString(1, pseudo.getText());
pstmt.setString(2, new String(password.getPassword()));
final ResultSet rs = pstmt.executeQuery();
答案 1 :(得分:4)
正如其他人所说,String.format
是直接等效的,但您应该使用PreparedStatement
代替。来自the documentation:
在以下设置参数的示例中,con表示 活动连接:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, 153833.00) pstmt.setInt(2, 110592)
使用PreparedStatement
代替String.format
将保护您的代码免受SQL注入。
答案 2 :(得分:1)
Java有similar method来格式化字符串。 String.format()
但是,如果您选择使用PreparedStatement
,则可以阅读文档here
来自文档:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
答案 3 :(得分:0)
要像其他人提到的那样直接回答你的问题,请使用String.Format,这是一个很好的资源:How to use java.String.format in Scala?。
但是,在这个特定的例子中,真正的答案不是进行字符串替换,而是在SQL语句中使用参数。
类似的东西:
query =
String query = "SELECT * FROM utilisateurs WHERE pseudo = ? AND password = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, pseudo.getText());
ps.setString(2, password.getPassword());
ResultSet rs = ps.executeQuery();