Эквивалент потока данных JDBC

#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.