CREATE TABLE Projects
(
PROJECT_ID INTEGER NOT NULL, ГЕНЕРИРУЕМЫЙ ВСЕГДА КАК ИДЕНТИЧНОСТЬ (НАЧАТЬ С 1,
INCREMENT BY 1),
PROJECT_TITLE VARCHAR(100),
START_DATE DATE
)
INSERT INTO Projects(Project_Title,Start_Date ) Значения («Тестовый проект 1000», «15 января 2023 г.»)
INSERT INTO Projects(Project_Title, Start_Date) Значения («Тестовый проект 2000», «21 февраля 2023 г.»)//Вот как создается Cached_RowSet:
Код: Выделить всё
RowSetFactory myRowSetFactory;
CachedRowSet cached_RowSet;
myRowSetFactory = RowSetProvider.newFactory();
cached_RowSet = myRowSetFactory.createCachedRowSet();
cached_RowSet.setUrl("DATABASE_URL");
cached_RowSet.setUsername("USERNAME");
cached_RowSet.setPassword("PASSWORD");
int [] keys = {1};
cached_RowSet.setKeyColumns(keys);
cached_RowSet.setCommand("Select * from Projects");
cached_RowSet.execute();
Код: Выделить всё
cached_RowSet.absolute(1);
cached_RowSet.updateString("Project_Title","Project Title Update 1000");
cached_RowSet.updateDate("Start_Date", null); // ---> gets error!!!
cached_RowSet.acceptChanges();
это выдаст ошибку!!!
< Strong>Это ошибка, которую я получаю:
java.sql.SQLDataException: 22005: [0] DATE, [1] INTEGER
в org.apache .derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:84)
в org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:141)
в org.apache .derby.impl.jdbc.Util.generateCsSQLException(Util.java:225)
в org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:220)
в org.apache .derby.impl.jdbc.EmbedConnection.newSQLException(EmbedConnection.java:3208)
в org.apache.derby.impl.jdbc.ConnectionChild.newSQLException(ConnectionChild.java:153)
в org.apache .derby.impl.jdbc.EmbedPreparedStatement.dataTypeConversion(EmbedPreparedStatement.java:1714)
в org.apache.derby.impl.jdbc.EmbedPreparedStatement.setNull(EmbedPreparedStatement.java:345)
в java.sql .rowset/com.sun.rowset.internal.CachedRowSetWriter.updateOriginalRow(CachedRowSetWriter.java:752)
в java.sql.rowset/com.sun.rowset.internal.CachedRowSetWriter.writeData(CachedRowSetWriter.java:366)
в java.sql.rowset/com.sun.rowset.CachedRowSetImpl.acceptChanges(CachedRowSetImpl.java:898) ........ xxxxxxxxx
это использование OpenJDK 17.
Однако, если я использую оператор типа «UPDATE Projects SET Start_Date = null WHERE Project_ID = 1»,
он работает. Я думаю, что в Java CachedRowSet есть ошибка. Пожалуйста, помогите.
Пожалуйста, помогите. Я уже задавал этот вопрос более 1 года назад. Никто не может решить эту проблему.
Пожалуйста, помогите. Спасибо.
Я попытался установить в поле даты значение null, используяcachedrowset.updateDate("date",null) илиcachedrowset.updateNull("date"). поскольку рассматриваемое поле даты имеет значение NULL, я ожидаю, что для него будет установлено нулевое значение. но кэшированный набор всегда выдает ошибку.
В качестве обходного пути мне нужно использовать оператор SQL «UPDATE Projects SET Start_Date = null WHERE Project_ID = 1». Это работает, но не тот набор кэшированных строк, который я действительно хочу сделать.
Я думаю, что в Java CachedRowSet есть ошибка. Пожалуйста, помогите.
Пожалуйста, помогите
Подробнее здесь: https://stackoverflow.com/questions/790 ... tenulldate