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 正则表达式中获取所有数据并过滤它更快?