使用createNativeQuery时如何在INSERT语句中查找SQLGrammarException

时间:2019-04-09 11:21:41

标签: java persistence

我正在尝试插入表,但是表名和值是在代码运行时从json文件获取的,因此我需要解析json并获取表名,列名和数据。 问题出在

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement

但是我不知道问题出在哪里

这是我的createNativeQuery

Query q = entityManager.createNativeQuery("INSERT INTO " + tableName + " (" + columnName + ") VALUES (" + columnValues + ")");

然后设置这样的参数

for (int p = 0; p < columnSpecs.size(); p++) {
 String tempColumnName = columnSpecs.get(p).getColumnName();
 if ("created_By".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, createdBy);
 } else if ("creation_Date".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, modifiedTimestamp);
 } else if ("TMP_ID".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, TMP_ID);
 } else if ("form_Id".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, formId);
 } else if ("import".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, _import);
 } else if ("key".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, key);
 } else if ("rev".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, rev);
 } else if ("revType".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, revType);
 } else if ("table_Id".equalsIgnoreCase(tempColumnName)) {
  q.setParameter(p + 1, tableId);
 } else {
  if (columnSpecs.get(p).getDataType().toLowerCase().contains("varchar")) {
   q.setParameter(p + 1, payload.getString(columnSpecs.get(p).getColumnName()));
  } else if (columnSpecs.get(p).getDataType().toLowerCase().contains("number")) {
   q.setParameter(p + 1, payload.getBigDecimal(columnSpecs.get(p).getColumnName()));
  } else if (columnSpecs.get(p).getDataType().toLowerCase().contains("timestamp")) {
   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
   q.setParameter(p + 1, new Timestamp(format.parse(payload.getString(columnSpecs.get(p).getColumnName())).getTime()));
  } else if (columnSpecs.get(p).getDataType().toLowerCase().contains("boolean")) {
   q.setParameter(p + 1, payload.getBoolean(columnSpecs.get(p).getColumnName()));
  } else if (columnSpecs.get(p).getDataType().toLowerCase().contains("date")) {
   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
   q.setParameter(p + 1, new Timestamp(format.parse(payload.getString(columnSpecs.get(p).getColumnName())).getTime()));
  }
 }
}

执行时

int result = q.executeUpdate();

我遇到了javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:无法执行语句

我想知道我的错误在哪里,但是异常什么也没说,并且Query参数没有显示我的插入查询是什么,如果我可以在执行之前看到插入字符串,但是Query eather没有该功能否则我找不到

0 个答案:

没有答案