如何使用JAVA从mySQL数据库中提取BLOB(从2d数组到BLOB)
下面的代码用于将2darray转换为BLOB并插入数据库如何使用JAVA从mySQL数据库中提取BLOB(从2d数组到BLOB),java,mysql,Java,Mysql,下面的代码用于将2darray转换为BLOB并插入数据库 ByteArrayOutputStream bas = new ByteArrayOutputStream(); DataOutputStream ds = new DataOutputStream(bas); for (float f : secondArray) ds.writeFloat(f); byte[] bytes = bas.toByteArray(); java.s
ByteArrayOutputStream bas = new ByteArrayOutputStream();
DataOutputStream ds = new DataOutputStream(bas);
for (float f : secondArray)
ds.writeFloat(f);
byte[] bytes = bas.toByteArray();
java.sql.Blob b1 = new SerialBlob(bytes);
PreparedStatement state = conn.prepareStatement("INSERT INTO blob_table (id, for_blob) " + " VALUES(6,?)");
state.setBlob(1, b1);
state.executeUpdate();
下面的代码用于提取BLOB并将其转换回2d数组
Statement state1 = conn.createStatement();
ResultSet rs = state1.executeQuery("SELECT * FROM blob_table WHERE id = 6");
while(rs.next()){
try{
Blob blob1 = rs.getBlob(1);
byte[] bytesInBlob = blob1.getBytes(1, (int) blob1.length());
ByteArrayInputStream bas1 = new ByteArrayInputStream(bytesInBlob);
DataInputStream dis = new DataInputStream(bas1);
float[] fArr = new float[bytesInBlob.length / 4]; // 4 bytes per float
for (int i = 0; i < fArr.length; i++)
{
fArr[i] = dis.readFloat();
}
for(int i=0;i<fArr.length;i++)
System.out.println(fArr[i]);
}catch(Exception i){
i.printStackTrace();
}
}
语句state1=conn.createStatement();
ResultSet rs=state1.executeQuery(“从blob_表中选择*,其中id=6”);
while(rs.next()){
试一试{
Blob blob1=rs.getBlob(1);
byte[]bytesInBlob=blob1.getBytes(1,(int)blob1.length();
ByteArrayInputStream bas1=新的ByteArrayInputStream(bytesInBlob);
DataInputStream dis=新的DataInputStream(bas1);
float[]fArr=new float[bytesInBlob.length/4];//每个float有4个字节
对于(int i=0;i 对于(int i=0;i您正在手动将float
s写入DataOutputStream
——您可以使用ObjectOutputStream
将整个float[]
序列化为字节[]
:
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(data);
ps.setBlob(1, new SerialBlob(baos.toByteArray()));
要阅读,只需使用ObjectInputStream
装饰Blob
二进制流:
try (final ObjectInputStream ois = new ObjectInputStream(rs.getBlob(1).getBinaryStream())) {
data = (float[]) ois.readObject();
}
请记住在第二种情况下关闭流-我使用了Java 7尝试资源来完成此操作。为什么不简单地使用ObjectOutputStream对整个数组进行序列化,而不是尝试重新发明轮子呢?对不起,我不熟悉Java中的这种编程方式。您能展示一个如何工作的示例吗?我可以插入序列化的将数组/对象导入mysql数据库