2012-07-15 55 views
-2

我一直坚持这个问题几天,并没有解决这个问题,所以需要寻求更高的权力来帮助。用于将数据发送到Apache Tomcat servlet中,我有这样的:存储为blob但存储前后长度不同的数据

temp = items.get(4); 
    Blob b = connection.createBlob(); 
    byte [] byteArray = null; 
    byteArray = temp.get(); 
    b.setBytes(1, byteArray); 
    sql = "insert into userdata (data)+"values ('"+b+"')"; 
    s = connection.createStatement(); 
    s.execute(sql); 
    out.println("Data successfully uploaded!"); 

以及用于背部从servlet的接收数据,我有这样的:

 Blob b = connection.createBlob(); 
    //String data = null; 
    byte [] buffer; 

    temp = items.get(1); 
    String comments = temp.getString(); 
    System.out.println(comments); 
    sql = "select sounddata from userdata where comments = '"+comments+"'"; 
    s = connection.createStatement(); 
    s.executeQuery(sql); 
    rs = s.getResultSet();  
    while (rs.next()) 
    { 
     b = rs.getBlob("data"); 

    } 
    buffer = b.getBytes(1, (int)b.length()); 
    System.out.println("AFTER:"+b.length()); 
    System.out.println("FILE:"+b); 

然而,我的斑点长度是前,后我插入不同进入mysql数据库。我有一个34912的blob长度,但是当我检索它时,它只有27!这里可能是什么问题?

我将错误追溯到blob中的差异。在将blob插入数据库时​​,blob值为“[email protected]”,但是当我检索它时,则变为“[email protected]”。为什么?

回答

1

这是你的问题:

sql = "insert into userdata (data)+"values ('"+b+"')"; 

这不会逃脱b正常。例如,b可能有一个引号字符!您需要使用PreparedStatement来建立您的SQL,以便b正确地转义。

另外,"data"!= "sounddata"

+0

谢谢你亲切的先生!这是问题,原谅我,如果我没有自己打我因为我注意到一个类似的帖子关于同样的问题。 http://stackoverflow.com/questions/9430008/inserting-blob-data-in-java-using-preparedstatement – Sheep 2012-07-16 09:36:21