相当于Java中的String.Format()

时间:2013-05-14 20:49:09

标签: java

我有这种代码的和平:

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()));

4 个答案:

答案 0 :(得分:17)

String.format()可用于格式化字符串,Javadoc

public static String format(String format, Object... args)
  

使用指定的格式字符串和参数返回格式化字符串。

但是,在构建SQL查询字符串时,首选方法是使用PreparedStatementJavadoc):

  • 保护您免受SQL注入
  • 允许数据库缓存您的查询(构建查询计划一次)

使用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();