Java JDBC从SQL查询解析int

Java JDBC从SQL查询解析int,java,mysql,string,servlets,jdbc,Java,Mysql,String,Servlets,Jdbc,我对Java编程相当陌生,有点困难。我四处寻找,但找不到一个确切的答案,我试图做什么 基本上,我创建了一个三层应用程序,它使用服务器上运行的servlet使用JDBC访问mySQL数据库 在大多数情况下,我的应用程序运行良好。我能够运行查询并显示结果 问题是,我需要基于我的查询实现一些逻辑,这是一个字符串 比如说, ex1_查询:插入零件值'S5',P6',J7',50 ex2_查询:插入零件值“S5”、“P6”、“J7”和“400” 我的查询是以单个字符串的形式通过HTML表单提交的。如您所见

我对Java编程相当陌生,有点困难。我四处寻找,但找不到一个确切的答案,我试图做什么

基本上,我创建了一个三层应用程序,它使用服务器上运行的servlet使用JDBC访问mySQL数据库

在大多数情况下,我的应用程序运行良好。我能够运行查询并显示结果

问题是,我需要基于我的查询实现一些逻辑,这是一个字符串

比如说,

ex1_查询:插入零件值'S5',P6',J7',50

ex2_查询:插入零件值“S5”、“P6”、“J7”和“400”

我的查询是以单个字符串的形式通过HTML表单提交的。如您所见,ex1_查询和ex2_查询之间的唯一区别是它们的最后一个值为50和400

逻辑是,如果最后一个值>=100,我需要实现一些东西


如果该值为用户准备的语句

 String param1= "S5";
  String param2= "p6";
  String param3= "j7"; 
  int param4= 50 0r 400  ; 

 public void someMethod(String param1,String param2,String param3,String param4){

if(param4 >= 100){
//your stuff
param4 =  ; //your new value;
}

query =  insert into parts values (?, ?, ?,?);

如果您无法控制您可能希望成为好友并解析的查询,请执行查询,例如:

"^\s*insert\s+into\s+([A-Za-z0-9]+)\s+values\s+\(\s*('\w+'\s*,\s*){3}([0-9]+)\)\s*$"

这实际上是一个老式的grep regex,但是java.util.regex可以使用具有相同函数的regex。它检查字符串是否遵循您的模式。submatch 1应该为您提供表名。submatch 2-4应该为您提供值1-3,submatch 5包含您要查找的字符串形式的数字。这也是拒绝您不喜欢的查询的好方法。

但如果您不想使用Preparedstatement

那么这里还有一个选择

    String ex1_query = "insert into parts values ('S5', 'P6', 'J7', 50);";

    String lastValue = ex1_query.substring( ex1_query.lastIndexOf(",")+1, ex1_query.lastIndexOf(")")).trim();

 Integer lastNumber = null;
        try {
            lastNumber = Integer.parseInt(lastValue);
        } catch (NumberFormatException e) {
            // if last value is not int then handle here 
            e.printStackTrace();
        } 
        if(lastNumber >=100){

        }

在lastValue中,您可以得到50/400或任何值,然后执行操作

如果您的查询除了整数值外保持不变,则可以使用子字符串

或者您可以使用正则表达式来实现这一点

String query = "insert into parts values ('S5', 'P6', 'J7', 50);";
Pattern pattern = Pattern.compile("(?<=(.+,\\s?))(\\d+)(?=(\\);))");
int value = Integer.parseInt(pattern.matcher(query).group());

您对这些查询字符串的生成没有任何控制权?所以你必须把值解析出来这将是一个很好的起点。好吧,我保证他们是以这种格式输入的。我基本上有一系列的命令,我复制并粘贴到表单中,然后执行。谢谢,这很有帮助。但我现在不得不担心将整个字符串解析成不同的参数。没有其他方法可以得到最后的值吗?谢谢你,你的两个答案都非常有用。我想这就是我要找的。
String query = "insert into parts values ('S5', 'P6', 'J7', 50);";
Pattern pattern = Pattern.compile("(?<=(.+,\\s?))(\\d+)(?=(\\);))");
int value = Integer.parseInt(pattern.matcher(query).group());