2016-10-14 1 views
0

Je travaille sur un projet dans lequel je souhaite créer une ligne vide dans une table, puis pouvoir la transférer là où elle sera chargée avec des données.Equivalent JDBC DataRow

exemple -

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 
} 

J'ai essayé d'utiliser JdbcRowSet, mais je ne suis pas sûr que ce soit la bonne façon de le faire, et les choses commencent à se salir avec cette approche de toute façon.

EDIT: Dans cette situation particulière, je ne souhaite utiliser aucun cadre ou ORM. Tout simplement vieux JDBC.

+0

En JDBC, vous affectez des valeurs à des colonnes individuelles pendant une insertion. Si vous voulez insérer un enregistrement logique, vous pouvez utiliser quelque chose comme Hibernate, qui mappe un objet sur une ligne. –

Répondre

0

Si vous ne voulez utiliser que du JDBC simple, il n'y en a pas vraiment. Vous pouvez essayer d'utiliser un ensemble de lignes, mais - afaik - elles ne sont pas vraiment destinées à cela, et dans mon expérience (limitée) l'implémentation de la référence de jeu de lignes incluse avec Java est un fiasco bogué qu'il faut éviter. Vous devez utiliser un ORM comme Hibernate ou une bibliothèque comme jOOQ ou spring-jdbc (bien que même ceux-ci ne fonctionnent pas comme vous le souhaitez). Cela dit, votre façon de travailler est l'inverse de ce qui - à mon avis - est le moyen habituel: collecter d'abord les données, puis les insérer dans la base de données. Si cela n'est pas possible pour une raison quelconque, vous devez d'abord collecter la quantité minimale de données, l'insérer, puis collecter le reste des données et mettre à jour la base de données.

+0

Puis-je transmettre un PreparedStatement? Dans chaque classe de mapping, je définirais les paramètres appropriés. – hrazzer

+0

@hrazzer Vous pourriez le faire, mais ce serait une abstraction qui fuirait et rendrait le test plus difficile, et relierait intimement une grande partie de votre code à JDBC. –