2016-08-19 2 views
-1
//Convert binary image file to byte array to base64 encoded string 
      FileInputStream mFileInputStream = new FileInputStream("C:\\basicsworkspace\\base64upload\\src\\main\\resources\\basic.png"); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      byte[] b = new byte[1024]; 
      int bytesRead = 0; 
      while ((bytesRead = mFileInputStream.read(b)) != -1) { 
       bos.write(b, 0, bytesRead); 
      } 
      byte[] ba = bos.toByteArray(); 
      byte[] encoded = Base64.getEncoder().encode(ba); 
      connection = DriverManager.getConnection(connectionString); 
      String insertSql = "INSERT INTO test (image) VALUES " 
        + "("+encoded+")"; 
      System.out.println(insertSql); 
      prepsInsertProduct = connection.prepareStatement( 
       insertSql); 
      System.out.println(prepsInsertProduct.execute()); 

Попытка вставить изображение на сервер sql и должна иметь изображение в формате base64. Я становлюсь ниже исключения. Пожалуйста, дайте мне знать, какой тип данных и как вставить изображение в качестве base64 в sql-сервере.Попытка вставить Base64 изображение в базу данных сервера sql

Выход:

 INSERT INTO test (image) VALUES ([[email protected]) 
     java.sql.SQLException: Invalid SQL statement or JDBC escape, terminating ']' not found. 
    at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:1270) 
    at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:165) 
    at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.<init>(JtdsPreparedStatement.java:111) 
    at net.sourceforge.jtds.jdbc.JtdsConnection.prepareStatement(JtdsConnection.java:2492) 
at net.sourceforge.jtds.jdbc.JtdsConnection.prepareStatement(JtdsConnection.java:2450) 
at base64upload.base64upload.App.main(App.java:70) 
+0

']' не найден, поэтому добавьте ']' для вашего запроса в конце значений типа ([B @ 7229724f'] ') –

+1

@ZaidYasyaf Спасибо, вы, сделал мой день с этим советом – Andremoniy

+0

Почему вы хотите, чтобы Base64 сначала закодировал байты? Вы будете бесполезно тратить пространство. – Kayaman

ответ

1

Вы просто конкатенации строки с toString() значением массива байтов. Это неверно. Вы должны использовать другой подход:

String insertSql = "INSERT INTO test (image) VALUES (?)"; 
    System.out.println(insertSql); 
    prepsInsertProduct = connection.prepareStatement(insertSql); 
    // here set your array 
    prepsInsertProduct.setBytes(encoded); 
Смежные вопросы