2011-12-26 3 views
0

J'ai une table de base de données dans laquelle une colonne (declatationform) est de type « bytea » je veux stocker des images dans cette colonne donc j'ai retourner une méthode qui estPréparer la déclaration pour octet [] en java

public void uploadRentProofDeclaration(final MultipartFile declarationForm, 
     final int rentProofInfoId, int year) { 

    String updateSql = "update plit_landlordinfo" + year 
      + " set filename=?,declarationform=? where cid=?"; 
    getJdbcTemplate().execute(updateSql, new PreparedStatementCallback() { 
     public Object doInPreparedStatement(
       final PreparedStatement pSstatement) throws SQLException, 
       DataAccessException { 
      pSstatement.setString(1, declarationForm.getOriginalFilename()); 

      try { 
       pSstatement.setBinaryStream(2, new ByteArrayInputStream(
         declarationForm.getBytes()), declarationForm 
         .getBytes().length); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      pSstatement.setInt(3, rentProofInfoId); 

      pSstatement.execute(); 
      return null; 
     } 
    }); 
} 

Ici ce qui se passe est le nom du fichier est en cours de sauvegarde mais octet [] n'est pas enregistrer encore cette colonne est vide dans ma table et il ne donne aucune erreur quelqu'un peut m'aider quel est le problème

Répondre

0

Notez bien comment le getBytes() de declarationForm fonctionne (c'est-à-dire que la méthode est appelée deux fois)? Essayez de stocker le tableau d'octets de la méthode getBytes().

byte []bytes=declarationForm.getBytes(); 
pSstatement.setBinaryStream(2, new ByteArrayInputStream(bytes),bytes.length); 

Ou vous pouvez également utiliser la méthode PreparedStatement.setBytes().

byte []bytes=declarationForm.getBytes(); 
pSstatement.setBytes(2,bytes); 
Questions connexes