繁体   English   中英

Java中的Oracle查询

[英]Oracle query in java

我在使用Oracle时遇到了一些麻烦,因为我习惯了MySql语法,

我正在尝试在Java程序中实现查询,但我不断收到错误消息:ora-0933 sql命令未正确结束。

我的查询是:

String query1 = "SELECT t.nome, h.Valor_Atual, h.Valor_Antigo, a.nome 
  FROM  Tecnologias t, Historico h, Academista a
  WHERE h.Id_Academista = a.Id_Academista 
    AND h.Id_Tecnologia = t.Id_Tecnologia 
    AND (Valor_Atual || Valor_Antigo  || nome) 
  LIKE '%" +ValToSearch + "%'";

我做错了什么还是Oracle语法?

非常感谢!

尽管(Valor_Atual || Valor_Antigo || nome) LIKE '%" +ValToSearch + "%'是有效的SQL语法,但如果要搜索的值恰好匹配从一列的值到下一个列的交叉值,则它可能会错误地匹配。 。 因此,您需要使用OR ,并且需要分别检查列。

其他事宜:

  • 使用JOIN语法
  • 使用PreparedStatement而不是字符串连接
  • 使用try-with-resources (假设您不是)

这意味着您的代码应如下所示:

String sql = "SELECT t.nome, h.Valor_Atual, h.Valor_Antigo, a.nome" +
              " FROM Historico h" +
              " JOIN Academista a ON a.Id_Academista = h.Id_Academista" +
              " JOIN Tecnologias t ON t.Id_Tecnologia = h.Id_Tecnologia" +
             " WHERE h.Valor_Atual LIKE ?" +
                " OR h.Valor_Antigo LIKE ?" +
                " OR a.nome LIKE ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
    stmt.setString(1, "%" + ValToSearch + "%");
    stmt.setString(2, "%" + ValToSearch + "%");
    stmt.setString(3, "%" + ValToSearch + "%");
    try (ResultSet rs = stmt.executeQuery()) {
        while (rs.next()) {
            // code here
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM