Java + Oracle 中的 SQL 查询

Posted

技术标签:

【中文标题】Java + Oracle 中的 SQL 查询【英文标题】:SQL Query In Java + Oracle 【发布时间】:2018-11-22 11:38:13 【问题描述】:

在使用 java 时,我真的很难将这个 SQL 记入脑海。

我的问题是:我想在我的 sql 查询中使用一个变量,但我似乎无法让它工作,它捕获了正确的值(我在标签上显示它),但它没有显示任何记录,但是,如果我将变量替换为“5”,它会显示正确的记录...

        try 
             Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = mysqlConnect.ConnectDb();


           int idaca = Integer.parseInt(idhist.getText());
  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 a.Id_Academista = "+idaca+" AND h.Id_Tecnologia = t.Id_Tecnologia
                        AND (h.Valor_Atual || h.Valor_Antigo  || t.nome)  LIKE '%" + ValToSearch + "%'";

            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(query1);

            historico history;

            while (rs.next()) 
                history = new historico(rs.getString("Nome"), rs.getInt("Valor_Antigo"),
                        rs.getInt("Valor_Atual"), rs.getString("Nome"));
                historicoList.add(history);
             //END WHILE
         //END TRY
        catch (Exception e) 
            JOptionPane.showInputDialog(null, e);
        //END CATCH 

到目前为止,这就是我的代码... ValToSearch 工作正常,虽然...

提前感谢您!干杯

【问题讨论】:

ValToSearch 工作正常,但 - 如果手动输入 '%5%' 时查询有效,则表示 ValToSearch 无效。但是问题可能在您的代码中的其他地方,仅用两行代码很难判断 我遇到了“+idaca+”的问题,如果我用 5 替换它,它可以正常工作.. :/ 请使用一些查询生成器,例如***.com/questions/5620985/… 在此之前添加空格 AND idaca+"AND @EduardoFernandes 尝试通过添加System.out.println("sql query --> "+query1); 打印query1 【参考方案1】:

AND h.Id_Tecnologia 之前加一个空格。这应该可以解决您的问题。

【讨论】:

您从数据库中获得的错误消息可能会指出该问题。始终查看错误消息。确保您的程序打印它们(不仅仅是try/catch/ignore)。确保将它们包含在 *** 问题中。 没有错误信息,就是问题所在,它没有返回任何东西 已编辑答案,但仍然没有结果:/ 你会使用这样的错误处理吗docs.oracle.com/javase/tutorial/jdbc/basics/sqlexception.html 遵循@Jåcob 的建议:打印字符串query1 以查看您发送给BD 的内容。也许变量没有很好地初始化...... Pd:捕捉异常的非常奇怪的方式。通常您使用 println() 或记录器系统(log4j、slf4j 等)在控制台中显示它。 Pd2:如果您使用的是 Eclipse IDE,我建议您提供一份调试指南。理解它会帮助你发现错误,或者至少告诉我们找到你真正的问题How to debug【参考方案2】:

你不害怕在ValToSearch 中得到类似' OR 1 IN (DELETE * FROM Tecnologias ) 的东西吗? 使用参数转义或更好的一些查询生成器

【讨论】:

以上是关于Java + Oracle 中的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

为了对存储在 Oracle db 中的数据运行搜索查询,在 PL/SQL 中使用 REGEXP 是不是比在 Java 正则表达式中获取所有数据并过滤它更快?

oracle 中的 sql语句查询

java对ORACLE中的于NCHAR数据的处理,查询

如何理解嵌入在 Java Script 中的 SQL 查询中的转义

ORACLE 中的 SQL 查询 - 选择最近的日期

Oracle SQL 中的子查询