【问题标题】:JDBC parsing int from SQL queryJDBC 从 SQL 查询中解析 int
【发布时间】:2015-01-07 05:16:58
【问题描述】:

我对 Java 编程很陌生,遇到了一点困难。我已经四处搜索,但无法得到我想要做什么的确切答案。

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

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

问题是,我需要根据我的查询来实现一些逻辑,这是一个字符串。

例如,

ex1_query:insert into parts values ('S5', 'P6', 'J7', 50);

ex2_query:insert into parts values ('S5', 'P6', 'J7', 400);

我的查询是通过 HTML 表单作为单个字符串提交的。如您所见,ex1_query 和 ex2_query 之间的唯一区别是它们的最后一个值(50 和 400)。

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

如果该值为

我的查询将始终以该格式输入,但最后一个值可能在 0 到 1000 之间变化。

所以我的问题是……我怎样才能从字符串中解析最后一个 int?所以我可以确定我是否应该实现一些特定的逻辑?

我知道这听起来很简单,但我遇到了一些麻烦。任何帮助或指导将不胜感激。谢谢

【问题讨论】:

  • 您对这些查询字符串的生成没有任何控制权?所以你必须把值解析出来?
  • docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html - 这将是一个很好的起点。
  • 好吧,我保证他们是以那种格式输入的。我基本上有一系列命令,我复制并粘贴到我的表单中,然后执行。

标签: java mysql string servlets jdbc


【解决方案1】:

用户准备声明

 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 (?, ?, ?,?);

并执行您的查询

【讨论】:

  • 谢谢,这有帮助。但是我现在不得不担心将整个字符串解析为不同的参数。没有其他方法可以得到最后一个值吗?
【解决方案2】:

如果您对查询没有任何控制权,您可能希望与java.util.regex 成为朋友并解析如下内容:

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

这实际上是一个老式的 grep 正则表达式,但具有相同功能的正则表达式可以用于 java.util.regex。它检查字符串是否遵循您的模式。 submatch #1 应该给你你的表名。 submatch #2-#4 应该给你值 1-3 并且 submatch #5 包含你正在寻找的数字(当然是字符串)。也是拒绝您不喜欢的查询的好方法。

【讨论】:

    【解决方案3】:

    但是如果你不想和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 或任何值并做你的事情

    【讨论】:

    • 谢谢,您的两个回答都非常有帮助。我想这就是我想要的。
    【解决方案4】:

    如果您的查询除了integer 值外保持不变,您可以使用substring

    String query = "insert into parts values ('S5', 'P6', 'J7', 50);"
    int value = Integer.parseInt(query.substring(43, query.length()-2));
    

    或者您可以使用正则表达式来完成此操作。

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

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2012-06-14
      相关资源
      最近更新 更多