[英]JDBC parsing int from SQL query
我对使用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,则需要实现一些东西…
如果该值小于100,则只需按照指定的条件运行查询。
我的查询将始终以该格式输入,但最后一个值可能在0-1000之间变化。
所以我的问题是……我怎样才能仅解析字符串中的最后一个int? 因此,我可以确定是否应该实施某些特定的逻辑?
我知道这听起来很简单,但是我遇到了一些麻烦。 任何帮助或指导,将不胜感激。 谢谢
用户准备的声明
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 (?, ?, ?,?);
并执行查询
如果您对查询没有任何控制权,则可能希望与java.util.regex成为朋友并进行如下分析:
"^\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。 它检查字符串是否遵循您的模式。 子匹配项#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或任何值并执行您的任务
如果您的查询除该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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.