2014-11-19 3 views
0

думаю у меня есть небольшая проблема с этим кодом: , когда я пытаюсь вставить в базу данных значение, я получил одну ошибку.Вставить данные BLOB в базу данных

PS: я пытаюсь использовать:

  1. setBinaryStream (интермедиат parameterIndex, InputStream х) - Данные будут считаны из InputStream, как не нужно до конца из-файла достигается. Это было добавлено в JDBC 4.0 (Java 1.6).

  2. setBinaryStream (int parameterIndex, InputStream x, int length) - данные будут считаны из InputStream, если это необходимо для байтов длины.

  3. setBinaryStream (int parameterIndex, InputStream x, long length) - данные будут считаны из InputStream, если это необходимо для байтов длины. Это было добавлено в JDBC 4.0 (Java 1.6).

но каждый раз я получил простую ошибку. я не знаю, что такое делать ..... IMA код обезьяна ...

это класс:

public class DataServlet extends HttpServlet{ 
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException { 

     Connection conn = ConnectionToDB.connettiDB();     
     InputStream inputstream = null;   
     Part filepart = request.getPart("image"); 

     inputstream = filepart.getInputStream();    
     try{ 
      String sql = "insert into blob (data) values (?)"; 
      PreparedStatement statement = conn.prepareStatement(sql);    
      if (inputstream != null) { 
        // fetches input stream of the upload file for the blob column 
       statement.setBlob(1, inputstream); 
       } 

       // sends the statement to the database server 
       int row = statement.executeUpdate(); 
       if (row > 0) { 
        System.out.println("File uploaded and saved into database"); 
       } 

     } catch (SQLException ex) { 
      System.out.println("ERROR: " + ex.getMessage()); 
      ex.printStackTrace();} 
    } 
} 

это сообщение об ошибке:

  com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to 
    your MySQL server version for the right syntax to use near 'blob 
    (data) values (_binary'‰PNG 

     \0\0\0 
     IHDR\0\0\0\0\0\0\0\0\0;0®¢\0\' at line 1 
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown 
    Source) 
      at java.lang.reflect.Constructor.newInstance(Unknown Source) 
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
      at com.mysql.jdbc.Util.getInstance(Util.java:386) 
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) 
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) 
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) 
      at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) 
      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) 
      at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) 
      at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) 
      at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427) 
      at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345) 
      at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330) 
      at com.CvManagement.src.servlet.DataServlet.doPost(DataServlet.java:69) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
      at java.lang.Thread.run(Unknown Source) 
+0

Try использовать 'PreparedStatement.setInputStream()' вместо 'setBlob()' –

+0

Может быть, это будет полезно http://stackoverflow.com/questions/8348427/how-to-write-update-oracle-blob-in-a-reliable-way – prsmax

+0

@a_horse_with_no_name Метод setInputStream() не определен для типа PreparedStatement –

ответ

1

Мой первоначальный оценка, что это ошибка в драйвере, вероятно, неверна. Наиболее вероятной проблемой является использование вами недопустимого слова blob в вашем запросе. blob - это reserved word, и поэтому их следует указывать при использовании в качестве имени объекта.

Я бы ожидать, что она будет работать, если вы измените запрос:

String sql = "insert into `blob` (data) values (?)"; 
+0

Работаю, я репит ima code monkey .... –

Смежные вопросы