2015-04-07 3 views
0

Premier message jamais ici :) regardant frénétiquement de l'aide.Java DB sélectionnez colonne spécifique sur la ligne spécifique

Ce que j'essaie de faire est de récupérer une image spécifique stockée comme blob dans ma base de données. Je n'arrive pas à comprendre pourquoi cette requête ne s'exécute pas, j'obtiens une exception dès que j'atteins l'instruction executeQuery.

Ma table est:

Nom xCoordinate yCoordinate vista firstscree 0 0 0 imag secondscreen 1 img2 ... etc.

ResultSet rs = null; 
Statement stmnt = null; 
Connection con = null; 

String host = ... 
String unm = ... 
String pswrd = ... 

BufferedImage imgt = null; 
InputStream fis = null; 
int xcoord; 
int ycoord; 
int newcoord; 

String SQLNorth = "select vista from location where xcoordinate = "+xcoord+" and ycoordinate = "+newcoord; 
      newcoord = ycoord + 1; 
      System.out.println("New coord x and y are" + xcoord + newcoord); 

      con = DriverManager.getConnection(host, unm, pswrd); 
      stmnt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 
      rs = stmnt.executeQuery(SQLNorth); 
      rs.next(); 
      fis = rs.getBinaryStream(1); 
      imgt = javax.imageio.ImageIO.read(fis); 
     Image newImg = SwingFXUtils.toFXImage(imgt, null); 
     img_1.setImage(newImg); 
+1

Pouvez-vous publier l'exception? – javajavajava

+0

problème est qu'il ne capture aucune exception SQL l'exécution s'arrête, j'ai un println juste avant le rs = stmnt.executeQuery (SQLNorth); et c'est la dernière ligne ... –

+0

Donc vous ne savez pas avec certitude si vous obtenez une exception? Vous pouvez essayer d'ajouter un try/catch sur Exception juste pour voir si vous obtenez une exception d'exécution, mais vous devriez voir quelque chose dans la console/le journal en fonction de la façon dont vous l'exécutez. – javajavajava

Répondre

0

Je suppose qu'il a quelque chose à voir avec le comme vous construisez la requête. Essayez d'utiliser une instruction préparée à la place.

ResultSet rs = null; 
PreparedStatement stmnt = null; 
Connection con = null; 

String host = ... 
String unm = ... 
String pswrd = ... 

BufferedImage imgt = null; 
InputStream fis = null; 
int xcoord; 
int ycoord; 
int newcoord; 

String SQLNorth = "select vista from location where xcoordinate = ? and ycoordinate = ?"; 

newcoord = ycoord + 1; 
System.out.println("New coord x and y are" + xcoord + newcoord); 

con = DriverManager.getConnection(host, unm, pswrd); 

stmnt = con.prepareStatement(SQLNorth); 
stmnt.setInt(1, xcoord); 
stmnt.setInt(2, newcoord); 

rs = stmnt.executeQuery(SQLNorth); 
rs.next(); 
fis = rs.getBinaryStream(1); 
imgt = javax.imageio.ImageIO.read(fis); 
Image newImg = SwingFXUtils.toFXImage(imgt, null); 
img_1.setImage(newImg); 
+0

bien ça a marché je pense que j'avais une erreur de syntaxe dans le SQL xcoordinate n'a pas été écrit correctement, merci quand même :) –

+0

génial! Les instructions préparées sont généralement considérées comme les meilleures pratiques et elles ajoutent un peu de protection contre l'injection SQL dans le cas où l'entrée de l'utilisateur fait partie de la requête! – javajavajava