Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JAVA从mySQL数据库中提取BLOB(从2d数组到BLOB)_Java_Mysql - Fatal编程技术网

如何使用JAVA从mySQL数据库中提取BLOB(从2d数组到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

下面的代码用于将2darray转换为BLOB并插入数据库

    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数据库