在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
(因为读者可以将字节转换为字符串,但我们不需要)。
然后可以使用BufferedInputStream
的read(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/。这应该是了解流、阅读器等的起点。
有关BufferedInputStream
和BufferedReader
的文档,请参阅它们的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中如何把字节数组存储到数据库?的主要内容,如果未能解决你的问题,请参考以下文章