在Java函数中执行SQL语句

时间:2011-11-20 09:49:35

标签: java sql

我必须从一个属性中读取以下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();

1 个答案:

答案 0 :(得分:5)

我认为propsProperties个实例或类似实例。如果是这样,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。)请注意,即使参数是String,也不会在您传递的SQL中放置引号进入prepareStatement;这是为你处理的(同时正确转义该字符串以防止SQL injection,所以PreparedStatementsetXyz是你的朋友,你会很好地了解它们。)