Как найти SQLGrammarException в инструкции INSERT при использовании createNativeQuery - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь вставить таблицу, но имя и значения таблицы получены из файла 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 не имеет такой функциональности, или я не смог ее найти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...