Java 快速从LongblobMySQL读取图像
正如标题所说,我想在移动jslider时快速检索图像(存储在longblob中)。我有360个案例,它可以正常工作,但问题在于移动jslider时每个案例/图像的延迟/延迟。我用从本地机器检索的图像测试了这个想法,它运行得非常快/干净。我知道问题可能来自互联网连接,但相信我,我至少有3-4 MB/s的下载/上传速度 额外注意事项: 表引擎:MyISAM 列:长blob,每个图像约170-200kb-.pngJava 快速从LongblobMySQL读取图像,java,mysql,blob,jslider,Java,Mysql,Blob,Jslider,正如标题所说,我想在移动jslider时快速检索图像(存储在longblob中)。我有360个案例,它可以正常工作,但问题在于移动jslider时每个案例/图像的延迟/延迟。我用从本地机器检索的图像测试了这个想法,它运行得非常快/干净。我知道问题可能来自互联网连接,但相信我,我至少有3-4 MB/s的下载/上传速度 额外注意事项: 表引擎:MyISAM 列:长blob,每个图像约170-200kb-.png //calling jslider and setup jslider1 = new
//calling jslider and setup
jslider1 = new javax.swing.JSlider(); //my jslider
jslider1.setMajorTickSpacing(10);
jslider1.setMaximum(360);
jslider1.setMinorTickSpacing(5);
jslider1.setOrientation(javax.swing.JSlider.VERTICAL);
//and my change event
private void jslider1StateChanged(javax.swing.event.ChangeEvent evt) {
int x = jslider1.getValue();
switch (x) {
case 1:
try {
String sql = "select imga from test where deg ='" + x + "'";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
if (rs.next()) {
byte[] imagedata = rs.getBytes("imga");
format = new ImageIcon(imagedata);
jLabel1.setIcon(format); //where I put my image
}
} catch (Exception e) {
e.printStackTrace();
}
break;
case 2:
//[...] //I have 360 cases
}
} // close state changed
为什么要将图像保存在longblob中?你不能把它们储存在罐子里吗。如果您仍然想从数据库中检索LoBulb,请考虑使用缓存从数据库加载长BLUBB,并在Swing应用程序启动时使用初始化异步线程将其缓存在本地系统中。p> 当您编写类似于
String sql=“select imga from test where deg=”“+x+””的代码时,PreparedStatement
有什么意义代码>?PreparedStatement pstm=conn.prepareStatement(“从测试中选择imga,其中deg='“+x+””);结果集rs=pstm.executeQuery()//现在没事了?你没明白我的意思。PreparedStatement
s的全部目的是让数据库能够缓存查询。因此,您应该使用参数化查询。例如,从测试中选择imga,其中deg=?
。如果直接附加值,不仅性能差,而且容易受到SQL注入攻击。在使用之前,请先阅读PreparedStatement
s。我之所以不将其存储在Jar中,是因为我有很多图像,不仅仅是360个案例,而是360个案例中的多个。我使用longblob是因为我以前遇到过blob的问题,并且由于某些原因,它没有完全加载图像(由于blob的限制,显示为死像素)。您的缓存想法很有趣,但假设我的MySQL表等于1GB,假设您可以等待1小时来缓存所有数据。