我有一个桌面程序,我必须在数据库中保存不同格式和不同大小的图像文件。知道我该怎么做吗?任何人都可以帮助我,好吗?
问问题
2123 次
4 回答
0
通常您应该只将图像文件的地址存储在数据库中。
达到同样的目的,数据库不会变得臃肿。
于 2012-12-08T10:07:34.290 回答
0
作为 BLOB:http ://en.wikipedia.org/wiki/Binary_large_object
确切的实现取决于您的数据库系统。
于 2012-12-08T10:09:57.833 回答
0
这是新手开发人员最常见的问题。最好的解决方案是......您将图像保存在文件夹中并将文件路径保存在数据库中,然后您可以使用此文件路径访问文件。
于 2012-12-08T10:11:26.180 回答
0
您可以通过将图像转换为二进制来将图像保存到数据库中,如下所示:
public void saveImage(File file){
try {
String img_id=JOptionPane.showInputDialog("Enter Image ID");
FileInputStream fis=null;
String query="insert into image(image_id,image) values (?,?)";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:image");
PreparedStatement pstm=con.prepareStatement(query);
fis=new FileInputStream(file);
pstm.setString(1, img_id);
pstm.setBinaryStream(2, (InputStream)fis, (int)file.length());
pstm.executeUpdate();
JOptionPane.showMessageDialog(null, "Image Successfully Uploaded to Database");
pstm.close();
con.close();
} catch (Exception ex) {
System.out.println("Exception Occured: "+ex);
}
}
并通过再次从二进制制作图像并将其保存在某个物理位置来检索它:
public void getSavedImages(){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:image");
PreparedStatement pstm1 = con.prepareStatement("select * from image");
ResultSet rs1 = pstm1.executeQuery();
while(rs1.next()) {
InputStream fis1;
FileOutputStream fos;
String image_id;
try {
fis1 = rs1.getBinaryStream("image");
image_id=rs1.getString("image_id");
fos = new FileOutputStream(new File(Path to "C:\\" + (image_id) + "Your Extension(.jpg/.gif)"));
int c;
while ((c = fis1.read()) != -1) {
fos.write(c);
}
fis1.close();
fos.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
pstm1.close();
con.close();
} catch (Exception ex) {
System.out.println("Exception Occured:"+ex);
}
}
于 2012-12-08T11:04:51.220 回答