我已经知道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);
}
}
但是很可惜的这个代码会报 该流已关闭的错误。我很无奈
求救各位大神
希望各位大神能提供自己的方法
java连接sql server2008中对图片的存取和获取问题(转换成16进制数)
答案:2 悬赏:0 手机版
解决时间 2021-02-24 18:37
- 提问者网友:欺烟
- 2021-02-24 11:53
最佳答案
- 五星知识达人网友:第四晚心情
- 2021-02-24 12:59
把图片存储到数据库会很慢啊,一般都是把文件的名称与路径存储到数据库里,文件图片存储到文件夹里。
全部回答
- 1楼网友:西风乍起
- 2021-02-24 14:15
使用工具类来弄吧;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯