我正在尝试插入表,但是表名和值是在代码运行时从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没有该功能否则我找不到