存储为blob的数据但在存储之前和之后的长度是不同的

时间:2012-07-15 15:51:59

标签: java android mysql tomcat6

我已经坚持这个问题好几天了,没有解决这个问题的方法所以需要寻求更高的帮助力量。为了将数据发送到apache tomcat servlet,我有这个:

  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数据库之前和之后,我的blob长度是不同的。我的blob长度为34912,但当我检索它时,它只有27!这可能是什么问题?

我将错误追溯到blob的差异。将blob插入数据库时​​,blob值为“com.mysql.jdbc.Blob@2db19d”,但是当我检索它时,它变为“com.mysql.jdbc.Blob@14d7745”。为什么会这样?

1 个答案:

答案 0 :(得分:1)

这是你的问题:

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

这不会正确地逃脱b。例如,b可能包含引号字符!您需要使用PreparedStatement来构建您的sql,以便b正确转义。

此外,"data"!= "sounddata"