正如標題所說,我想要在jslider移動時非常快速地檢索圖像(以longblob存儲)。我有360個案例,而且沒有錯誤,但問題在於jslider移動時每個案例/圖像的延遲/延遲。我用本地機器檢索的圖像測試了這個想法,它的工作速度非常快/很乾淨。我知道問題可以從互聯網連接,但相信我,我有至少3-4 MB/s的下載/上傳。從longblob讀取圖像MySQL非常快
以下幾點需要注意: 表引擎:MyISAM的 柱:有每幅圖像〜170〜200 kb的LONGBLOB - 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
當你編寫像'String sql ='這樣的代碼時'PreparedStatement'的意義在測試中選擇imga,其中deg ='「+ x +」'「;'? – adarshr 2013-02-08 11:56:26
PreparedStatement pstm = conn.prepareStatement(「select imga from test where deg ='」+ x +「'」); ResultSet rs = pstm.executeQuery(); //現在可以嗎? – 2013-02-08 12:04:49
你沒有明白我的觀點。 'PreparedStatement'的全部目的是讓數據庫可以緩存查詢。出於這個原因,你應該使用參數化查詢。例如'從測試中選擇imga,其中deg =?'。如果直接追加值,不僅性能不佳,而且容易出現SQL注入攻擊。在使用它們之前,請閱讀'PreparedStatement's。 – adarshr 2013-02-08 12:30:31