Ich entwickle eine Webanwendung, wo ich unter anderem eine Datei in eine BLOB-Spalte in einer MySQL-Tabelle hochladen muss. Von dem, was ich sehe, kann dies getan werden kann, mit JDBC (PrepareStatement() usw.) nennt, aber ich möchte in der Lage sein, dies in einer EJB-Klasse zu tun - was habe ich gepflasterten sieht zusammen wie folgt aus:EJB und vorbereiteteStatement?
@Stateless
public class ItemsSession {
@PersistenceContext(unitName ="officePU")
private EntityManager em;
private List<Items> itl;
private static final Logger logger=
Logger.getLogger(ItemsSession.class.getName());
...
public String updateDocument(Integer id,InputStream is) throws SQLException{
String msg="";
try{
java.sql.Connection conn = em.unwrap(java.sql.Connection.class);
PreparedStatement pstmt=conn.prepareStatement("UPDATE Documents SET doc = ? WHERE id = ?");
pstmt.setBinaryStream(1, is);
pstmt.setLong(2, id);
pstmt.executeUpdate();
pstmt.close();
}
catch (PersistenceException e){
msg=e.getMessage();
}
return msg;
}
...
}
ich habe zwei Fragen, aber:
ich mag JDBC nicht direkt verwenden - ist es eine Möglichkeit, dies zu tun, die ‚reine JPA‘ (edit: nicht EJB) ist?
Wenn ich es so machen muss, ist PreparedStatement in der Container-verwalteten Transaktion enthalten?
Ein weiterer edit: der obige Code macht den Job - ich jetzt getestet haben. Aber es ist nicht schön, denke ich.
Es ist unklar, was Sie mit "reinem EJB" meinen. EJB ist keine Datenzugriffstechnologie. Normalerweise verwenden Sie JDBC oder JPA, um über EJBs auf die Datenbank zuzugreifen. –
Ah, ja, JPA, falsche Wortwahl - ich korrigiere es in meiner Frage. – j4nd3r53n