Java 快速从LongblobMySQL读取图像

Java 快速从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

正如标题所说,我想在移动jslider时快速检索图像(存储在longblob中)。我有360个案例,它可以正常工作,但问题在于移动jslider时每个案例/图像的延迟/延迟。我用从本地机器检索的图像测试了这个想法,它运行得非常快/干净。我知道问题可能来自互联网连接,但相信我,我至少有3-4 MB/s的下载/上传速度

额外注意事项: 表引擎:MyISAM 列:长blob,每个图像约170-200kb-.png

//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小时来缓存所有数据。