Ola … sou iniciante em Java e estou aprendendo desenvolvendo uma ferramenta.
Gostaria de ajuda para salvar um arquivo qq no meu banco de dados em um campo BLOB. E também como resgatar o mesmo.
O que tenho pronto é:
Metodo para escolher o arquivo …
JFileChooser vOpen = new JFileChooser();
int vRetorno = vOpen.showOpenDialog(null);
if (vRetorno==JFileChooser.APPROVE_OPTION) {
txtModel.setText(vOpen.getSelectedFile().getAbsolutePath().toString());
Depois quando vou salvar transformo o arquivo em byte[] na variavel vFileBytes
File vFile = new File(txtModel.getText());
byte[] vFileBytes = new byte[(int)vFile.length()];
int vOffSet = 0;
int vNumRead = 0;
try {
InputStream vIS = new FileInputStream( vFile );
while (vOffSet < vFileBytes.length && (vNumRead = vIS.read(vFileBytes, vOffSet, vFileBytes.length-vOffSet)) >= 0) {
vOffSet += vNumRead;
}
} catch (FileNotFoundException ex) {
Logger.getLogger(frmDocumentType.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(frmDocumentType.class.getName()).log(Level.SEVERE, null, ex);
}
objDocumentType.metCreateSQLCommands(vAction, txtId.getText(), txtCode.getText(), txtName.getText(), vFileBytes, null);
Onde nesse caso,chamei um outro metodo para criar a string com o insert … (nao estou colocando tudo, apenas parte que envolve o campo que desejo ajuda)
public void metCreateSQLCommands(String pAction, String pId, String pCode, String pName, byte[] pModel, String pDeleteReason)
vInsertUpdateDelete = "insert into tblDocumentType (Code, " +
" Name, " +
" Model, " +
" AddDateTime, " +
" AddUserId, " +
" UpdateDateTime, " +
" UpdateUserId, " +
" DeleteDateTime, " +
" DeleteUserId) ";
if (pCode.equals("")) {
vInsertUpdateDelete = vInsertUpdateDelete + "values ( null, ";
} else {
vInsertUpdateDelete = vInsertUpdateDelete + "values ('"+pCode+"', ";
}
if (pName.equals("")) {
vInsertUpdateDelete = vInsertUpdateDelete + " null, ";
} else {
vInsertUpdateDelete = vInsertUpdateDelete + " '"+pName+"', ";
}
if (pModel.equals("")) {
vInsertUpdateDelete = vInsertUpdateDelete + " null, ";
} else {
vInsertUpdateDelete = vInsertUpdateDelete + " " + pModel + ", ";
Apos isso todo a execução desse string com o comando insert
try {
vDatabase.getvStatement().executeUpdate(vInsertUpdateDelete);
vDatabase.getvConnection().commit();
vResult = true;
} catch (SQLException vSQLE) {
try {
vDatabase.getvConnection().rollback();
} catch (SQLException vSQLEi) {
JOptionPane.showMessageDialog(null, "Error in rollback command:\n" + vInsertUpdateDelete + "\n Details:" + vSQLEi);
}
JOptionPane.showMessageDialog(null, "Could not execute SQL command:\n" + vInsertUpdateDelete + "\n Details:" + vSQLE);
}
O que faço errado? Se rodo dessa maneira me da erro de execução no SQL … se coloco aspas simples no campo blob, grava como texto … o que fazer? Se puderem ,… como recuperar depois tambem