Here is the function that would convert binary data to a form that can be written to an out file. It follows the algorithm implemented by mysql for its "SELECT INTO outfile" functionality as described here.
public static byte[] getEscapedBlob(byte[] blob) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
for (int i=0; i<blob.length; i++) {
if (blob[i]=='\t' || blob[i]=='\n' || blob[i]=='\\') {
bos.write('\\');
bos.write(blob[i]);
} else if (blob[i] == 0) {
bos.write('\\');
bos.write('0');
} else {
bos.write(blob[i]);
}
}
return bos.toByteArray();
}
This is how you would use this function to generate a mysql outfile.
//gen infile for mysql
byte[] out = getEscapedBlob(data);
BufferedOutputStream f = new BufferedOutputStream(new FileOutputStream("/path/to/data.csv")) ;
String nonBlobFields = "\\N\t10\t20100301\t18\t1102010\t2010-03-01 00:00:00\t";
byte[] nonBlobData = nonBlobFields.getBytes("UTF-8");
f.write(nonBlobData, 0, nonBlobData.length);
f.write(out, 0, out.length);
f.write('\n');
f.close();
This writes some integer data followed by the blob data to the outfile, which can then be loaded back using "LOAD INFILE".
No comments:
Post a Comment