java - 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);

query

update  scoreconfig  set scorestatus=0 where scoreversion=props.getProperty("scoreversion");

但是我明白了

Error: ORA-00911: invalid character

...当我执行 ps.execute();

最佳答案

我假设 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。)请注意,即使参数是字符串,您也不要在两边加上引号它在您传递给 prepareStatement 的 SQL 中;这是为你处理的(以及正确转义该字符串以防止 SQL injection ,所以 PreparedStatementsetXyz 是你的 friend ,你会很了解他们)。

关于java - Java函数中SQL语句的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200705/

相关文章:

java - 使用 Spring Data Cassandra 进行直播(响应式(Reactive))

mysql - 如何找到在另一个表中找不到的行?

php - 查询 SQL 获取用户名并返回密码

php - 将所有图像从 mysql 数据库 blob 提取到目录

SQL Server 存储过程返回一个表

mysql - 插入到值具有子查询的表中并返回多行

java - 模拟 Json 响应

Java:instanceof vs 类名切换性能

java - 为什么这个对象在没有组合类的情况下仍然存在,即使它是组合的

java - 将 JTextPane 添加到 BorderLayout.SOUTH 会导致 JScrollPane 滚动