2010-12-02 37 views
0

Je veux créer beaucoup de blobs dans java [en mémoire] et l'écrire dans la table Oracle. Ce que je veux, c'est que le blob [bits à l'intérieur] soit aléatoire ou sudo aléatoire afin qu'Oracle ne puisse pas faire beaucoup de pré-optimisation en stockant le blob sur la table.créer un blob aléatoire dans jdbc et l'écrire dans oracle

Quelque chose comme

for(1..1000000) 
{ 
blob = createRandomBlob(sizeOfBlob); 
sqlText ="INSERT INTO test_blob (id, blob) VALUES(i, blob)"; 
stmt.executeUpdate(sqlText); 
} 

peut pointer quelqu'un que API JAVA je peux utiliser pour créer un tel blob [en mémoire plutôt que sur le disque] et l'écrire à db?

Merci

+0

Le problème avec ceci est que le pilote Oracle doit le supporter.Je suis coincé avec les pilotes Oracle 10g, et ils ne semblent même pas supporter la connexion de Java 6 ['createBlob()'] (http://download.oracle .com/javase/6/docs/api/java/sql/Connection.html # createBlob% 28% 29) Je ne sais pas si cela a été résolu dans les pilotes 11g – Powerlord

+0

Je viens de le tester avec Oracle 10.2 Pilotes + 11g à l'intérieur d'un EJB et je Ça n'a pas marché. Il s'est plaint de connection.createBlob(); –

Répondre

0

Je pense que cela devrait faire l'affaire

byte[] data = new byte[10000]; 
    fRandom.nextBytes(data); 
    try 
    { 
     SerialBlob fSerialBlob = new SerialBlob(data); 
    } catch (SerialException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

ne sais pas s'il y a un moyen plus rapide/efficace de le faire.

0

Je ne peux pas répondre pour le « stocker dans la partie DB », pas sûr de la « créer un tableau de blob aléatoire)

 
byte[] someBlob = createBlobBytes(); 
PreparedStatement stmt = connection.prepareStatement("INSERT INTO test_blob (id, blob) VALUES(?, ?)"; 
ByteArrayInputStream in = new ByteArrayInputStream(someBlob); 
stmt.setInt(1, id); 
stmt.setBinaryStream(2, in, someBlob.length); 
stmt.executeUpdate(); 

Cela devrait fonctionner correctement avec les pilotes 10.x