以下のようにJAVAからMYSQLを使っています。 しかし、30秒おきに使用しているSQL文の結果がDBを更新してもかわりません。 おそらく、javaまたはMYSQLでキャッシュが残っているためだと思うのですが、その無効化方法がわかりません。 その無効化方法のご教授をお願い申し上げます。 //MYSQLの各種設定 public onlineCycleChkDao() { // JDBCドライバの指定 this.driver = "com.mysql.jdbc.Driver"; // データベースの指定 this.server = "xxxx"; // MySQLサーバ ( IP または ホスト名 ) this.dbname = "xx"; // データベース名 this.url = "jdbc:mysql://" + server + "/" + dbname + "?useUnicode=true&characterEncoding=UTF8"; this.user = "xxxxxx"; // データベース作成ユーザ名 this.password = "xxxxxx"; // データベース作成ユーザパスワード DBcon(); try{ stmt = con.createStatement(); } catch(SQLException e){ System.err.println("SQL failed."); e.printStackTrace(); System.exit(2); } } private void DBcon(){ try{ // JDBCドライバの登録 Class.forName(this.getDriver()); // データベースとの接続 con = DriverManager.getConnection(getUrl(), getUser(), getPassword()); con.setAutoCommit(false); } catch(SQLException e){ System.err.println("SQL failed."); e.printStackTrace(); System.exit(2); } catch(ClassNotFoundException ex){ ex.printStackTrace(); System.exit(2); } } public void closeConnection(){ // コネクション切断 try{ con.close(); } catch(SQLException e) { System.out.println("MySQL Close error."); } } //サイクルSQL private long selectMaxSeqNo(String table){ long maxSeqNo = -1; try{ ResultSet rs; String sql; sql = "SELECT SQL_NO_CACHE SEQ_NO, NOW() FROM " + table ; //ここの取得結果が更新されません。対象テーブルは他のプログラムにて更新 sql += " ORDER BY RGST_TIME DESC limit 1;"; rs = stmt.executeQuery(sql); System.out.println(sql); while(rs.next()){ maxSeqNo = rs.getInt("SEQ_NO"); } rs.close(); } catch(SQLException e){ System.err.println("SQL failed."); e.printStackTrace(); System.exit(2); } System.out.println("seqNo:" + maxSeqNo); return(maxSeqNo); } public ArrayList selectMaxSeqNoList(){ //対象テーブルから最新のシーケンスNoリストを取得する。 ArrayList seqNoList = new ArrayList(); for(String Table : TableList){ //最新のシーケンスNo取得 long recentSeqNo = selectMaxSeqNo(Table); seqNoList.add(recentSeqNo); } return(seqNoList); }
↧