-2

私は何日もこの問題に悩まされており、この問題の解決策がないので、助けを求めるためにより高い力を探す必要があります。apache tomcatサーブレットにデータを送信するために、私はこれを持っています:

  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!");

サーブレットからデータを受信するために、私はこれを持っています:

      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の長さが異なります。ブロブの長さは34912ですが、取得すると27になります。ここで何が問題になる可能性がありますか?

エラーをblobの違いにトレースしました。blobをデータベースに挿入する場合、blobの値は「com.mysql.jdbc.Blob@2db19d」ですが、取得すると、代わりに「com.mysql.jdbc.Blob@14d7745」になります。どうしてこんなことに?

4

1 に答える 1

1

これがあなたの問題です:

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

bこれは適切にエスケープされません。たとえばb、引用文字が含まれている場合があります。正しくエスケープされるPreparedStatementように、SQLをビルドするためにを使用する必要があります。b

また、"data"!= "sounddata"

于 2012-07-15T16:34:23.470 に答える