【问题标题】:can reset parameterized SQL? [duplicate]可以重置参数化SQL吗? [复制]
【发布时间】:2019-03-17 23:24:07
【问题描述】:

我是 Parameterized SQL 的新手,我要做的是用它来更新东西,这很好,但是我有一个(日志)表,其中包含参数化 SQL 的描述发生了什么,当我将参数化 SQL 插入 log_table 它一直显示“?”这个符号

保存日志的代码:

    PreparedStatement stat;
    ResultSet rs;
    String sql="insert into rozhanai_log values (null,?,?,?)";
    try
    {
        stat = conn.prepareStatement(sql);
        stat.setString(1,sqlParadanan);//(sqlParadanan) is my parameterized SQL String
        stat.setTimestamp(2,time);
        stat.setString(3,empName);
        stat.execute();
    } 
    catch (Exception e)
    {
        System.out.println("log Nabw");
        e.printStackTrace();
    }

和(日志)表中的 SQL 字符串如下所示:

update rozhanai_customer_account set rozhanai_money_balance = rozhanai_money_balance + 1000.0 where rozhanai_account_id=?

我可以在这里做什么?

我正在考虑类似的事情(重新设置参数)?

谢谢

【问题讨论】:

  • 是的,它总是会显示?作为参数。请记住,JDBC 不会将参数作为字符串值“连接”到 PreparedStatement 中。它根据 JDBC 类型在数据库引擎会话中直接插入值。例如,setTimestamp() 将发送一个真实的时间戳值,而不是它的字符串表示形式。
  • 我建议将值本身呈现为字符串并保存这些字符串而不是 SQL 语句。可能是类似 CSV 的格式。
  • @TheImpaler:Postgres JDBC 驱动程序不是这样。 PreparedStatement.toString() 实际上会显示参数值。
  • @a_horse_with_no_name 这个方法很好用,谢谢!
  • @mhamadarsalan 如果有效,请将其发布为答案。它可能有用。

标签: java sql parameterized-query


【解决方案1】:

感谢a_horse_with_no_name的帮助,只需PreparedStatement.toString()就可以得到不带?符号的SQL字符串

    .
    .
    stat.setString(3,empName);
    String fullSQL = stat.toString();
    System.out.println(fullSQL); 
    .
    .
    .

输出:

com.mysql.jdbc.JDBC4PreparedStatement@6b179d: insert into rozhanai_log values (null,update rozhanai_customer...,2018-05-23,'Hama')

谢谢你

【讨论】:

  • 对不起,他的账号链接是this
猜你喜欢
  • 2021-06-12
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2017-08-08
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多