永发信息网

java连接sql server2008中对图片的存取和获取问题(转换成16进制数)

答案:2  悬赏:0  手机版
解决时间 2021-02-24 18:37
  • 提问者网友:欺烟
  • 2021-02-24 11:53
我已经知道java怎么以16进制的形式存储图片,这是我的代码:
public class ss {

File f=null;

PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
String url = "jdbc:sqlserver://localhost:1433;databaseName=image";
String user = "sa";
String password = "3209554";
String sql=null;

public ss() throws FileNotFoundException{
JFileChooser chooser=new JFileChooser();
chooser.setCurrentDirectory(new File("."));//定位当前目录
//下面的代码可以弹出选择文件的提示框
if(chooser.showOpenDialog(null)==JFileChooser.CANCEL_OPTION){
System.exit(0);
}

f=chooser.getSelectedFile();
InputStream fin=new FileInputStream(f);
try {
// 加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 得到连接
ct = DriverManager.getConnection(url, user, password);

sql = "insert into imagetable values(?,?)";
ps = ct.prepareStatement(sql);
ps.setString(1, "4");
ps.setBinaryStream(2, fin, (int)f.length());
ps.executeUpdate();

}catch(Exception e){
e.printStackTrace();
}finally {
try {

} catch (Exception e) {
try {
rs.close();
ps.close();
ct.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
}
}
}
我也在网上找过一些从数据库中读取16进制数据的图片,然后显示在面板JFrame中,但是都有错误,这是我总结出来的删减代码:
public class tt extends JFrame{
PreparedStatement ps = null;
Connection ct = null;
ResultSet rs = null;
String url = "jdbc:sqlserver://localhost:1433;databaseName=image";
String user = "sa";
String password = "3209554";
String sql=null;
File f=null;

public tt(){
try{
// 加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 得到连接
ct = DriverManager.getConnection(url, user, password);
sql="select * from imagetable where imagefile=?";
ps=ct.prepareStatement(sql);
ps.setString(1, "4");
rs=ps.executeQuery();
InputStream is = null;
while(rs.next()){
is= rs.getBinaryStream(2);

}
OutputStream out=null;
byte[] b=new byte[is.available()];
is.read(b);

Image image=ImageIO.read(is);
JLabel label = new JLabel(new ImageIcon(image));
add(label);
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws FileNotFoundException {
tt frame1=new tt();
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(800, 800);
frame1.setLocationRelativeTo(null);
frame1.setVisible(true);

}

}
但是很可惜的这个代码会报 该流已关闭的错误。我很无奈

求救各位大神

希望各位大神能提供自己的方法
最佳答案
  • 五星知识达人网友:第四晚心情
  • 2021-02-24 12:59
把图片存储到数据库会很慢啊,一般都是把文件的名称与路径存储到数据库里,文件图片存储到文件夹里。
全部回答
  • 1楼网友:西风乍起
  • 2021-02-24 14:15
使用工具类来弄吧;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯