我必须从一个属性中读取以下 SQL 语句。
update scoreconfig set scorestatus=0 where scoreversion=props.getProperty("scoreversion");
我必须从其他属性文件中获取分数版本的值。
但是,当我在 java 函数中准备如下语句时:
final String query = strLine;
PreparedStatement ps=con.prepareStatement(query);
query
有
update scoreconfig set scorestatus=0 where scoreversion=props.getProperty("scoreversion");
但是我明白了
Error: ORA-00911: invalid character
...当我执行 ps.execute();
最佳答案
我假设 props
是 Properties
实例或类似的。如果是这样,props.getProperty("scoreversion")
部分将发生在 Java 层,而不是数据库中。相反:
String sql = "update scoreconfig set scorestatus=0 where scoreversion=?";
PreparedStatement ps = con.prepareStatement(sql);
// If scoreversion is a String:
ps.setString(1, props.getProperty("scoreversion"));
ResultSet rs = ps.executeQuery();
...或者如果 scoreversion 是一个 int,使用它代替 setString
行:
// It scoreversion is an int:
ps.setInt(1, Integer.parseInt(props.getProperty("scoreversion")));
...等,酌情转换。
基本上,当您使用 prepareStatement
时,你在参数应该去的地方使用 ?
,然后你在 PreparedStatement
上使用 setXyz
实例来设置这些参数。 (奇怪的是,它们以 1
开头,而不是 0
。)请注意,即使参数是字符串,您也不要在两边加上引号它在您传递给 prepareStatement
的 SQL 中;这是为你处理的(以及正确转义该字符串以防止 SQL injection ,所以 PreparedStatement
和 setXyz
是你的 friend ,你会很了解他们)。
关于java - Java函数中SQL语句的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200705/