Java函数中SQL语句的执行

Java函数中SQL语句的执行,java,sql,Java,Sql,我必须从一个属性中读取下面的SQL语句 update scoreconfig set scorestatus=0 where scoreversion=props.getProperty("scoreversion"); 对于分数版本的值,我必须从其他属性文件中获取它 但是,当我在java函数中准备一个语句时,如下所示: final String query = strLine; PreparedStatement ps=con.prepareStatement(query); 其中,q

我必须从一个属性中读取下面的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"); 更新scoreconfig set scorestatus=0,其中scoreversion=props.getProperty(“scoreversion”); 但我明白了

Error: ORA-00911: invalid character 错误:ORA-00911:无效字符
…当我执行时,
ps.execute()

我假设
props
是一个实例或类似实例。如果是这样,那么
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")));
…等,根据需要进行转换


基本上,在使用时,使用
参数应该放在哪里,然后在实例上使用
setXyz
来设置这些参数。(奇怪的是,它们以
1
开始,而不是
0
)请注意,即使参数是字符串,在传递到
prepareStatement
的SQL中也不会在其周围加引号;这是为您处理的(同时正确地转义该字符串以防止,因此
PreparedStatement
setXyz
是您的朋友,您会很好地了解他们)。

欢迎使用堆栈溢出!当您提出问题时,问题文本框上方有一个
[?]
链接,右侧有一个
如何格式化
框,其中列出了如何标记代码以使其在问题中可读。很值得一读。我正要给你修好,但rsp比我先修好了。:-)
@user829710
欢迎来到StackOverflow!我建议您更改用户名。@jmendeth:我认为您的编辑有点过火了。(只是我的观点,其他人可能会有所不同。)rsp看起来不错,只是没有把“where query=”位放在代码块中。我认为
where query has=…
不是java代码的一部分;作者想说:在avobe代码中,
query
变量包含以前读取的SQL(
update scoreconfig set scorestatus…
)(这就是为什么我用注释替换它)你不这么认为吗?@jmendeth:我确实这么认为,这就是为什么我对rsp版本这么说的原因。我现在已经更新了它,因为挂起的编辑已经消失了。