正则表达式替换java中查询参数中的值

时间:2013-12-24 07:40:18

标签: java sql regex oracle11g matcher

我正在编写一个应用程序来搜索表单中的特定字段,并向用户显示相应的查询(用户可以保存执行的查询并稍后加载查询)。我正在使用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中显示查询和查询结果。

2 个答案:

答案 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

由于