【问题标题】:Java StringBuilder with printf. Equivalent String.format带有 printf 的 Java StringBuilder。等价的 String.format
【发布时间】:2013-07-01 17:04:45
【问题描述】:

我正在使用 StringBuilder 构建一个很长的查询。

StringBuilder sb = new StringBuilder();
sb.append("select * from x where name = %s'");
String.format(sb.toString, "John"); 

什么相当于这样的东西?或者这实际上是正确的方法吗?

【问题讨论】:

    标签: java string stringbuilder string.format


    【解决方案1】:

    您似乎正在尝试为SQL 构建字符串。 PreparedStatement 应用于此目的。

    PreparedStatement preparedStatement = 
            connection.prepareStatement("select * from x where name = ?");
    preparedStatement.setString(1, "John");
    

    编辑:

    鉴于您使用的是EntityManager,您可以使用其等效的setParameter

    Query q = 
     entityManager.createNativeQuery("select * from x where name = ?", MyClass.class);
    q.setParameter(1, "John");
    

    【讨论】:

    • 同样的答案,但我太快了
    • @nelsonjuan 通过追加在这里尝试做什么?
    • @Ruchira 我实际上是在使用 javax.persistence.EntityManager 来处理数据库。我正在准备字符串到 em.createNativeQuery(sb.toString(), SomeClass.class).getResultList()
    • @nelsonjuan 您可以使用setParameterEntityManager's本机查询设置参数
    【解决方案2】:

    这可能会对您有所帮助。其中con 是连接

        PreparedStatement preStatement = con.prepareStatement("select * from x where name = ?");
        preStatement.setString(1, "John");
    

    【讨论】:

      【解决方案3】:

      如果您不使用 SQL,对于一般格式化追加,可以使用Formattorformat() 方法。

      例如

      /**
       * Generate a string that also contains data list.
       *
       * @return
       */
      public String toStringWithDataList() {
          List<T> list = toList();
      
          StringBuilder sb = new StringBuilder(getClass().getName());
          Formatter fm = new Formatter(sb);
      
          sb.append(toString()).append(System.lineSeparator()); // basic info,
      
          // value list,
          if (size > 0) {
              sb.append("list = ");
              for (int i = 0; i < list.size(); i++) {
                  fm.format("\n\t[%d]-th: %s", i, list.get(i));
              }
              sb.append(System.lineSeparator());
          }
      
          return sb.toString();
      }
      
      

      【讨论】:

        猜你喜欢
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多