StringBuffer sd=new StringBuffer(); sd.append("select count(1) "); sd.append("from CLM_COUNTERPARTY "); sd.append("where id= " +id); Query query = this.getEntityManager().createNativeQuery(sd.toString()); int i= (int) query.getResultList();有何错误
时间: 2024-03-25 09:39:11 浏览: 52
在这段代码中,最后一行获取查询结果时,使用了 `query.getResultList()` 方法,该方法返回的是一个列表,而不是单个值。因此,需要将其转换为 int 类型的值。
可以将最后一行代码更改为以下代码:
```
int i = ((Number)query.getSingleResult()).intValue();
```
这里使用了 `query.getSingleResult()` 方法来获取查询结果,返回的是一个单个的结果值,然后将其转换为 int 类型的值。
相关问题
StringBuffer sd=new StringBuffer(); sd.append("select count(1) "); sd.append("from CLM_COUNTERPARTY "); sd.append("where id= " +id); Query query = this.getEntityManager().createNativeQuery(sd.toString()); int i= (int) query.getSingleResult();哪里错了
这段代码可能会存在 SQL 注入的问题,因为在拼接 SQL 语句时没有对变量 id 进行合法性校验和防注入处理。
建议使用 PreparedStatement 来预编译 SQL 语句,然后使用参数绑定的方式来传入变量,比如:
```
String sql = "select count(1) from CLM_COUNTERPARTY where id = ?";
Query query = this.getEntityManager().createNativeQuery(sql);
query.setParameter(1, id);
int i = (int) query.getSingleResult();
```
这样可以有效避免 SQL 注入的问题。同时,建议对传入的变量进行类型校验和范围校验,避免非法输入导致的异常或错误。
StringBuffer sd=new StringBuffer(); sd.append("delete from "+banktable+" where MAIN_ID = "+"'"+id+"'"); this.getEntityManager().remove(sd.toString());
这段代码有一些问题,需要进行修改。
首先,StringBuffer的append方法是用来拼接字符串的,而不是用来执行SQL语句的,因此需要将拼接后的字符串转换为SQL语句并执行。可以使用EntityManager的createNativeQuery方法来创建SQL查询对象,然后调用executeUpdate方法执行SQL语句。修改后的代码如下:
```java
String sql = "DELETE FROM " + banktable + " WHERE MAIN_ID = '" + id + "'";
Query query = this.getEntityManager().createNativeQuery(sql);
int rowsDeleted = query.executeUpdate();
```
其中,sql变量为拼接后的SQL语句,Query对象用来执行SQL语句,executeUpdate方法返回删除的行数。
另外,执行删除操作时,需要注意事务的提交。完整的代码如下:
```java
String sql = "DELETE FROM " + banktable + " WHERE MAIN_ID = '" + id + "'";
EntityTransaction transaction = this.getEntityManager().getTransaction();
transaction.begin();
Query query = this.getEntityManager().createNativeQuery(sql);
int rowsDeleted = query.executeUpdate();
transaction.commit();
```
其中,EntityTransaction对象用来管理事务的提交和回滚。
阅读全文