我正在编写一个应用程序来搜索表单中的特定字段,并向用户显示相应的查询(用户可以保存执行的查询并稍后加载查询)。我正在使用API根据所选字段生成查询。 API以下列格式返回生成的查询。
生成的查询 :
SELECT T0."id" AS "COL0"
FROM student_table T0
WHERE ( ( ( T0."student_name" = ? )
AND ( T0."grade" = ? ) )
AND ( T0."student_no" LIKE ? ) )
预期查询 :
SELECT T0."id" AS "COL0"
FROM student_table T0
WHERE ( ( ( T0."student_name" = 'John' )
AND ( T0."grade" = 'A' ) )
AND ( T0."student_no" LIKE '12%' ) )
现在我必须从上面的查询构建正确的查询。由于我在from中有字段值,我想替换“?”具有相应的值。
可以替换'?'使用java字符串替换相应的字段值replaceAll方法?我们可以使用反向引用的概念来用相应的值替换问号吗?如果正则表达式无法实现,请提出更好的方法来解决问题。
修改
我认为准备好的声明不会有太多帮助,因为我需要为数百个无序的字段自动化这个过程,这也是一个非常昂贵的操作。 (纠正我如果我错了)
我实际上正在使用我公司特定的平台API,我在查询定义中添加条件和查询列,并以上述格式返回执行的查询。用户应该能够保存预期的查询,我应该在UI中显示查询和查询结果。
答案 0 :(得分:1)
尝试按以下方式执行查询
String insertTableSQL = "SELECT T0.\"ID\" AS \"COL0\" FROM STUDENT_TABLE T0 WHERE ( ( ( T0.\"STUDENT_NAME\" = ? ) AND ( T0.\"GRADE\" = ? ) ) AND ( T0.\"STUDENT_NO\" LIKE ? ) )";
PreparedStatement preparedStatement = dbConnection.prepareStatement(insertTableSQL);
preparedStatement.setString(1, "John");
preparedStatement.setString(2, "A");
preparedStatement.setString(3, "12%");
preparedStatement.execute();
答案 1 :(得分:1)
您可以使用PreparedStatement执行包含?
的查询PreparedStatement ps = null;
ResultSet rs = null;
String sQuery = "SELECT T0."ID" AS "COL0" FROM STUDENT_TABLE T0 WHERE ( ( ( T0."STUDENT_NAME" = ? ) AND ( T0."GRADE" = ? ) ) AND ( T0."STUDENT_NO" LIKE ? ) )";
ps = objConnection.prepareStatement(sQuery);
ps.setString(1, valueOf_T0."STUDENT_NAME");
ps.setString(2, valueOf_T0."GRADE");
ps.setString(3, valueOf_T0."STUDENT_NO");
rs = ps.executeQuery();
由于您有数据值并且您知道数据库字段的类型,因此您可以根据您的数据类型(如setInt(), setDouble()
等)在setter方法中设置值。
详细了解:http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html
由于