J'essaie de lire un Blob à partir d'une base de données MySQL, contenant du texte aléatoire.

Mon code ressemble à ceci:

Connection conn = DriverManager.getConnection(connection_string);
String message = "Some message";
byte[] messageBytes = message.getBytes("UTF-8");

Blob blob = conn.createBlob();
blob.setBytes(1l,messageBytes);

String sql = "INSERT INTO db.dbname('blob') VALUES ('" + blob + "');"
PreparedStatement pat = conn.prepareStatement(sql);
pat.executeUpdate();

Dans une autre classe, j'ai le code pour lire le champ blob à partir de la base de données :

//some SQL code to read the blob field here
Blob readBlob = resultSet.getBlob("blob");
byte[] bytes = readBlob.getBytes(1, (int) readBlob.length());
String str = new String(bytes);

System.out.println(str);

La sortie est : com.mysql.cj.jdbc.Blob@3be81fc2

Mon code est exactement le même que certaines des solutions de travail sur StackOverflow, donc je ne sais pas exactement ce qui ne va pas.

0
CristianBastan 8 oct. 2020 à 20:59

1 réponse

Meilleure réponse

Il semble que vous ayez fait une petite erreur lors de l'insertion. Votre code devrait ressembler à ceci :

String sql = "INSERT INTO db.dbname('blob') VALUES (?);"
PreparedStatement pat = conn.prepareStatement(sql);
pat.setBlob(1, blob);
pat.executeUpdate();

Veuillez utiliser des déclarations préparées avec ces espaces réservés. Sinon, les attaquants pourraient facilement lancer une attaque par injection SQL. Si vous voulez voir comment fonctionne l'injection SQL, il y a une excellente vidéo Computerphile à ce sujet sur YouTube.

1
rowing-ghoul 8 oct. 2020 à 18:16