Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将参数值替换为?在sql查询中_Java_Sql_Regex - Fatal编程技术网

Java 将参数值替换为?在sql查询中

Java 将参数值替换为?在sql查询中,java,sql,regex,Java,Sql,Regex,假设我有这样一个查询: INSERT INTO users (lastname, age, city, email, firstname) VALUES ('Doe',30,'Austin', 'jon@ds.com', 'Jon') INSERT INTO users (lastname, age, city, email, firstname) VALUES (?,?,?,?,?) 我想用问号替换此查询中传递的所有参数,得到如下结果: INSERT INTO users (lastnam

假设我有这样一个查询:

INSERT INTO users (lastname, age, city, email, firstname) VALUES ('Doe',30,'Austin', 'jon@ds.com', 'Jon')
INSERT INTO users (lastname, age, city, email, firstname) VALUES (?,?,?,?,?)
我想用问号替换此查询中传递的所有参数,得到如下结果:

INSERT INTO users (lastname, age, city, email, firstname) VALUES ('Doe',30,'Austin', 'jon@ds.com', 'Jon')
INSERT INTO users (lastname, age, city, email, firstname) VALUES (?,?,?,?,?)
请注意,这只是一个示例,查询可能要复杂得多。我只想用问号替换所有传递的参数


你知道如何做到这一点吗

使用replaceAll函数很简单

String str = "INSERT INTO users (lastname687878, age1, city55,email, firstname66) VALUES (33,30,'Austin', 'jon@ds.com', 'Jon')";
System.out.println(str.replaceAll("'.+?'","?").replaceAll(",\\d+", ",?").replaceAll("\\(\\d+", "(?"));  
输出:

INSERT INTO users (lastname687878, age1, city55,email, firstname66) VALUES (?,?,?, ?, ?)

通常情况下,情况正好相反。为什么要这样做?我正在捕获对数据库的查询,不想捕获参数值。要正确执行此操作并处理所有可能的变化,您需要一个真正的SQL解析器。正则表达式本身不能胜任这项任务,不一定。参数并不总是字符串,可以是数字。在这个例子中,30不会被替换为?HHey,我只是在eclipse中运行它,这里点(.)表示任何字符,可以是数字或字符串。如果您有疑问,请运行并检查。正在寻找你的反馈。啊,我错过了。谢谢,将试用超过试用,这是我的代码最终字符串in=“插入用户(姓氏、年龄、城市、电子邮件、名字)值('Jones15560503',116719280',Austin','bob2008584593@example.com“,‘Bob-2106121947’”;System.out.println(in.replaceAll(“.+?”,“?”);这里是输出插入到用户(lastname、age、city、email、firstname)值(?,116719280,?,,?,?,?)中。实际上,我在number或string中的意思是,如果参数值不是string,那么它周围就不会有任何引号(')