我使用的是MySQL數據庫和JDBC連接JDBC MySQL的新插入未檢測
,問題就來工作客棧Java服務器當我嘗試做以下步驟
1.啓動服務器
2.手動插入(使用phmypadmin)數據庫中的新記錄。
3.Select使用JDBC API
我只得到已經分別在DB,而不是新的記錄的記錄。
這裏是我的連接:
public JDBCMySQL(String nomFitxerPropietats) throws Exception {
if (nomFitxerPropietats == null) {
nomFitxerPropietats = "jdbcMysql.txt";
}
Properties props = new Properties();
try {
props.load(new FileReader(nomFitxerPropietats));
} catch (FileNotFoundException ex) {
throw new Exception("No es troba fitxer de propietats", ex);
} catch (IOException ex) {
throw new Exception("Error en carregar fitxer de propietats", ex);
}
String driver = props.getProperty("driver");
if (driver == null && System.getProperty("java.version").compareTo("1.6") < 0) {
throw new Exception("La versió de Java obliga a definir la propietat driver dins el fitxer de propietats");
}
String url = props.getProperty("url");
if (url == null) {
throw new Exception("Manca la propietat url en el fitxer de propietats");
}
String user = props.getProperty("user");
String password = props.getProperty("password");
// No controlem !=null per què hi ha SGBDR que permeten no indicar user/contrasenya (MsAccess)
try {
if (driver != null) {
Class.forName(driver);
}
con = DriverManager.getConnection(url, user, password);
con.setAutoCommit(false);
} catch (SQLException ex) {
throw new Exception("No es pot establir connexió", ex);
} catch (ClassNotFoundException ex) {
throw new Exception("No es pot carregar la classe " + driver);
}
}
這是我用它來找回我的記錄功能:
@Override
public List<Cita> getCitas(int sesID) {
List<Cita> citas = new ArrayList<Cita>();
try {
Statement st = null;
ResultSet rs = null;
String consulta = " select iii.estatinforme,s.NUMERO,c.diahora, s.PERIT_NO,s.INFORME_NO,s.POLISSA_ID,s.DATAASSIGNACIO,s.DATAOBERTURA,s.DATATANCAMENT,s.DESCRIPCIOSINISTRE,s.TIPUSSINISTRE,s.ESTATSINISTRE,s.polissa_id,p.municipi from SINISTRE s join POLISSA p on (s.polissa_id = p.ID_POLISSA) join PERIT pe on (pe.NUMERO = s.PERIT_NO) join CITA c on (c.sinistre_id = s.numero) left join INFORMEPERICIAL iii on (c.sinistre_id=iii.sinistre_id) where (s.PERIT_NO = ? and (iii.ESTATINFORME = 'PENDENT' or iii.ESTATINFORME is null or DATE_FORMAT(c.diahora, '%Y-%m-%d') = CURDATE() )) order by c.diahora ";
PreparedStatement pstmt = con.prepareStatement(consulta);
pstmt.setInt(1, sesID);
rs = pstmt.executeQuery();
while (rs.next()) {
//handling my reads...
}
pstmt.close();
rs.close();
} catch (SQLException ex) {
Logger.getLogger(JDBCMySQL.class.getName()).log(Level.SEVERE, null, ex);
}
return citas;
}
我懷疑它無關,與準備好的語句或查詢,因爲,在我停止服務器並重新啓動後,使用函數GetCitas()檢索新的。
被修改:我使用的配置文件(jdbcMysql.txt):
URL = JDBC:MySQL的:// MYIP:3306/MYDB
用戶=爲myuser
密碼= mypass
你確定你是在phpMyAdmin的會議上提交你的事務?此外,雖然JDBC不緩存任何內容,但也許您的服務器設置了某種類型的數據庫緩存,請檢查您的配置。 – SJuan76
是的,很確定。 –
最好的做法是隻在需要時打開連接,並且爲最小的必要範圍打開連接。我有一種感覺,你可能會在程序期間建立連接。 (我認爲與此相關的問題是,在更新數據庫之前打開連接,因此它沒有與數據庫當前狀態的連接,所以當您執行檢索時,將不檢索添加的行。)將連接作爲字段刪除可能會更好,並使其成爲每種方法的局部變量。這種方式可以控制何時打開和關閉連接。 – Ishnark