2015-06-19 49 views
0

我想通过“浏览”按钮将图像插入到数据库中。这条线有什么问题,ps.setBlob(l16, inputStream)?此行每次都显示一个错误。如何将图像插入Java数据库中

我的代码是:

Class.forName("com.mysql.jdbc.Driver"); 

Connection con=DriverManager.getConnection( 
"jdbc:mysql://localhost:3306/hostel_management","root",""); 

PreparedStatement ps= con.prepareStatement("insert into student_info values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 

ps.setString(1, tf1.getText()); 
ps.setString(2, tf2.getText()); 
. 
. 
. 
ps.setString(15, tf15.getText()); 

InputStream inputStream = new FileInputStream(new File(tf16.getText())); 

ps.setBlob(16, inputStream); 

ps.execute(); 

JOptionPane.showMessageDialog(null, "Successfully Inserted", "Message", JOptionPane.ERROR_MESSAGE); 

con.close(); 
+2

“此行每次都显示错误”错误消息是什么? – hexafraction

+0

您是否验证过参数顺序? –

+1

尝试'ps.setBlob(16,inputStream,(int)fileLength);' – saka1029

回答

-1

最佳办法,是将图像存储的文件夹中,并且图像的路径保存到数据库中。将Blob或Clob对象保存到数据库中过于耗时,并且在某些情况下可能会导致效率低下。

+0

这应该是一条评论。这不是问题的答案。 –

+0

这非常含糊。也可能是错的。无论如何,将路径存储在数据库中是完全没有意义的,那么你将如何到达图像呢? – Cubic

+0

将路径存储到数据库中时,只需将路径放入html代码中的img tag - src参数中即可。使用客户端浏览器上的http自动从服务器获取图像。 数据库中的url看起来像 - “http://servername.com/somefolder/uniqueimagename.jpg”,并且您的html img标记看起来像这样 -

0

将图像转换为Base64,并将其作为文本保存到数据库中。当你想要它时,获取它并将其还原为位图并使用它。

使用Apache公地做到这一点的最好办法

Base64.encode(FileUtils.readFileToByteArray(file)); 

用于解码它,

InputStream stream = new ByteArrayInputStream(Base64.decode(image.getBytes(), Base64.DEFAULT)); 

如果图像是一个字符串包含Base64编码的文本。 让我知道你是否想要更多的帮助。

+0

你为什么要那样做?存储任意二进制数据,如op正试图做的是blob列正在为什么 – Cubic

+0

Blob在内部像字符串一样处理。所以它当然是有道理的。 – Sibidharan

+1

TEXT和CHAR将转换为它们与时间相关的字符集。 BLOB和BINARY只是存储字节。 BLOB用于存储二进制数据,而Text用于存储大字符串。 将BLOB值视为二进制字符串(字节字符串)。他们没有字符集,排序和比较基于列值中字节的数值。 TEXT值被视为非二进制字符串(字符串)。他们有一个字符集,并且根据字符集的排序规则对值进行排序和比较。 – Sibidharan