在java中如何把字节数组存储到数据库?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中如何把字节数组存储到数据库?相关的知识,希望对你有一定的参考价值。

我想把图片存到数据库中(Access或sql2005)但不知该怎样存放,
有人说把图片文件转换成byte数组,然后存储到数据库。可是byte数组
怎样才能存到数据库中呢??数据库中的字段应该设置成哪中类型?
谁懂???

保存字节数组到数据库分两步:
第一、利用FileInputStream.read(byte[])方法把内容读取到byte[]数组中,比如图片是由二进制数组成的,就可以定义为一个字节数组。
第二、在数据库中对应记录字段应该设置为blob类型,这样就能够顺利保存了
事例代码如下:
PreparedStatement stmt = connection.generatePreparedStatement("INSERT INTO ... ");
stmt.setBytes(1, yourByteArray);

其中,yourByteArray是你读出来的字符数组。
参考技术A 转成byte数组是正确的。他的意思应该是让你通过字节流读取图片然后存到数据库,最后还是以图片的形式存。只不过中间过程是采用字节流。字段建议你设成大对象类型,好像是叫blog吧,英文我忘了。你再查查资料吧,不是很难本回答被提问者采纳 参考技术B clob 参考技术C sql2005有image吗?用这个行

将固定字节从输入流存储到字节数组中

【中文标题】将固定字节从输入流存储到字节数组中【英文标题】:store fixed bytes into byte array from input stream 【发布时间】:2015-02-14 22:24:25 【问题描述】:

我正在尝试学习 Java,但遇到了必须创建 URL 提取器的实践问题。我能够流式传输数据并打印它。但是我对缓冲阅读器并不熟悉,因此我需要帮助来创建一个 100 字节的缓冲区,将 100 字节的数据从流复制到这个字节数组,然后处理这部分,然后从流等....

以下是我的代码,我们将不胜感激。

我知道我想要的东西需要在 while 循环内完成。我想我需要创建一个字节数组,然后将数据存储到其中。这是我更感兴趣的方式。

编辑:我不需要任何代码示例,因为我正在努力学习。只有描述我如何做到这一点就足够了。提前非常感谢。

【问题讨论】:

如果你想处理字节那么你为什么要使用阅读器? (Reader 用于字符,InputStream 用于字节) @immibis 我不确定我需要如何解决这个问题。但我本质上想要做的是从流中读取字符,将它们存储到字节数组中,直到达到 100 个字节的数据。然后对这个数组做任何我想做的事情,并再次用下一组字符填充数组,直到字节数组中填充了 100 个字节的数据。你明白吗? 【参考方案1】:
    在你的while循环之外创建一个字节数组(你想要的大小)(你可以这样重复使用它,所以它更快)。 您可以使用BufferedInputStream 包裹在您原来的InputStream 周围而不是Reader(因为读者可以将字节转换为字符串,但我们不需要)。 然后可以使用BufferedInputStreamread(byte[])方法将下一系列字节复制到数组中。然后,您可以按照自己的方式处理检索到的字节。

请参阅 the API documentation 作为 read(byte[]) 所做工作的参考。

【讨论】:

你能解释一下第2步吗?如何在我的代码中实现 BufferedInputStream 而不是 BufferedReader?【参考方案2】:

如 cmets 中所述,Reader(及其子类BufferedReader)用于读取字符而不是字节。您应该改为使用BufferedInputStream 来读取指定大小的字节数组:

public static void main(String[] args) throws IOException 
    String website = "thecakestory.com";
    Socket client = new Socket(InetAddress.getByName(website), 80);

    PrintWriter pw = new PrintWriter(client.getOutputStream());

    pw.println("GET /index.php / HTTP/1.1\r\n");
    pw.println("Host: " + website);
    pw.flush();

    BufferedInputStream input = new BufferedInputStream(client.getInputStream());

    String x;
    int bytesRead;
    byte[] contents = new byte[100];
    while ((bytesRead = input.read(contents)) != -1) 
        x = new String(contents, 0, bytesRead);
        System.out.print(x);
    

    client.close();
    pw.close();


一些有用的链接:

有关 Java IO 相关内容的介绍,请参阅 Java 教程页面http://docs.oracle.com/javase/tutorial/essential/io/。这应该是了解流、阅读器等的起点。

有关BufferedInputStreamBufferedReader 的文档,请参阅它们的API 参考:

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

【讨论】:

如何根据上面给出的代码设置 BufferedInputStream?你能再解释一下吗?很抱歉,我是 Java 的菜鸟,因此无法弄清楚它是如何工作的? 已更新。您可以通过指定套接字的输入流client.getInputStream() 来创建它,有点类似于您对BufferedReader 所做的方式。 这行得通!非常感谢。你能给我一些链接,我可以在其中阅读这两者的确切工作原理吗?我仍然不清楚 BufferedReader 或 BufferedInputStream 的实际作用。 当然。我刚刚添加了它们。

以上是关于在java中如何把字节数组存储到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

字节数组到短数组并在java中再次返回

在C++中,如何把字节数组转换成字符串

Java - 将字节数组作为字符串存储在数据库中,并使用字符串值创建字节数组

将固定字节从输入流存储到字节数组中

Java - MP3 解码并将其存储到字节数组中

如何在Java中将二维布尔数组转换为一维字节数组?