Используйте COALESCE в prepareStatement для "вставки в" cmd - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь выполнить ниже cmd, но это вызывает исключение:

org.hsqldb.HsqlException: несовместимый тип данных в операции

conn.prepareStatement("INSERT INTO TableA (colA) VALUES (IFNULL(?, 1)))

Здесь TableA имеет colA с целочисленным типом данных. Тем не менее, если я изменил выше cmd на

conn.prepareStatement("INSERT INTO TableA (colA) VALUES(IFNULL(null, 1)))

, он работает правильно, но не имеет никакого смысла, потому что хочет передать значение colA во время выполнения.

код:

   ps = conn.prepareStatement("INSERT INTO TableA (colA) VALUES(IFNULL(?, 1))")

   ps.setObject(1, 5);  // this cmd doesn't have any problem code is failing at preparestatement itself

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

setObject является обобщенным c, поэтому, если вы хотите принудительно использовать тип, вы можете использовать третий параметр следующим образом:

ps.setObject(1, 5, JDBCType.INTEGER);

Поскольку вы использовали постоянное значение, поэтому ваш компилятор должен решить, if - целое число или другой тип чисел c.

Вы также можете написать

Integer myValue = 5;
ps.setObject(1, myValue);

или

Integer myValue = 5;
ps.setObject(1, myValue.intValue());
0 голосов
/ 04 мая 2020

Используйте setInt вместо setObject

ps.setInt(1, 5);
...