#java #mysql #jdbc #mapping
#java #mysql #jdbc #сопоставление
Вопрос:
Я работаю над проектом, в котором я хотел бы создать пустую строку в таблице, а затем иметь возможность передавать ее туда, где она будет загружена с данными.
пример —
insert(DomainObject obj) {
// connect to DB
// create new row
// call methods in hierarchy that insert data into row
// such as save(DomainObject obj, DataRow row)
// commit
}
Я пытался использовать JdbcRowSet, но я не уверен, что это правильный способ сделать это, и в любом случае при таком подходе все начинает запутываться.
РЕДАКТИРОВАТЬ: в этой конкретной ситуации я не хочу использовать какие-либо фреймворки или ORM. Просто старый JDBC.
Комментарии:
1. В JDBC вы присваиваете значения отдельным столбцам во время вставки. Если вы хотите вставить логическую запись, вы можете использовать что-то вроде Hibernate, которое сопоставляет объект строке.
Ответ №1:
Если вы хотите использовать только обычный JDBC, то на самом деле такой вещи не существует. Вы могли бы попытаться использовать набор строк, но — afaik — они на самом деле не предназначены для этого, и, по моему (ограниченному) опыту, ссылочная реализация набора строк, включенная в Java, является ошибочным фиаско, которого следует избегать.
Вам нужно либо использовать ORM, такой как Hibernate, либо библиотеку, такую как jOOQ, или spring-jdbc (хотя даже они на самом деле не работают так, как вы хотите).
Тем не менее, ваш способ работы обратный тому, что, на мой взгляд, является обычным способом: сначала соберите данные, а затем вставьте их в базу данных. Если по какой-либо причине это невозможно, сначала вы собираете минимальный объем данных, вставляете его, затем собираете остальные данные и обновляете базу данных.
Комментарии:
1. Могу ли я передать PreparedStatement? В каждом классе сопоставления я бы установил соответствующие параметры.
2. @hrazzer Вы могли бы, но это была бы непрочная абстракция, которая усложнила бы тестирование и тесно привязала бы большую часть вашего кода к JDBC.