2

MemSQL データベースに blob を挿入しようとしています。

ここに挿入するソースを取得するので、それを blob に変換します。

byte[] bytes = rs.getString(2).getBytes("utf-8");
Blob blob = insert.insertTableBinary(bytes);

これは私のinsertTableBinary関数です:

Blob blob = conn.createBlob();
blob.setBytes(1, bytes);
System.out.println(blob.length());
String sql = "INSERT INTO binaire(receipt) VALUES(\"" + blob + "\")";
executeSQL(sql);    
return blob;

この時点で blob.length は 1555 に等しいですが、それを読んだときのおかげで:

String sql2 = "SELECT * FROM binaire";
Statement st = conn.createStatement();
ResultSet rs2 = st.executeQuery(sql2);
while(rs2.next()) { 
    Blob blob = rs2.getBlob(1);
    System.out.println(blob.length());
}

長さは 25 です。奇妙なことに、取得したテーブルのデータを見ると、次のようになります。com.mysql.jdbc.Blob@6a8bc5d9

だから、良いものを保存していませんか?これはオブジェクトへの参照ですが、ブロブではないと思います。

しかし、何が間違っているのかわかりません。準備されたステートメントの例がたくさんありますが、この機能はMemSQLでは利用できません

4

2 に答える 2

1

編集:できればそのままblobにしておきます。byte[]

まず、prepareStatement を使用することを強くお勧めします。

何かのようなもの

PreparedStatement stmt = con.preparedStatement("INSERT INTO binaire(receipt) VALUES(?)");
stmt.setObject(1, blob)
stmt.executeUpdate()

しかし、準備されたステートメントのアイデアが嫌いな場合は、次のようにすることができます

String sql = "INSERT INTO binaire(receipt) VALUES(\"" + new String(blob) + "\")";

最高、-JoYo

于 2015-07-22T15:57:50.123 に答える