Java 未检测到JDBC MySQL新插入

Java 未检测到JDBC MySQL新插入,java,mysql,jdbc,server,Java,Mysql,Jdbc,Server,我正在使用Mysql数据库和jdbc连接的java服务器上工作 当我尝试执行以下步骤时,问题就出现了 1.启动服务器 2.手动(使用phmypadmin)在数据库中插入新记录 3.使用jdbc api选择记录 我只得到数据库中已经存在的记录,而不是新记录 这是我的连接: public JDBCMySQL(String nomFitxerPropietats) throws Exception { if (nomFitxerPropietats == null) {

我正在使用Mysql数据库和jdbc连接的java服务器上工作

当我尝试执行以下步骤时,问题就出现了

1.启动服务器

2.手动(使用phmypadmin)在数据库中插入新记录

3.使用jdbc api选择记录

我只得到数据库中已经存在的记录,而不是新记录

这是我的连接:

 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);
        }

    }
publicjdbcmysql(字符串nomFitxerPropietats)引发异常{
if(nomFitXerproiteAts==null){
nomFitxerPropietats=“jdbcMysql.txt”;
}
Properties props=新属性();
试一试{
加载(新文件读取器(nomFitxerPropietats));
}捕获(FileNotFoundException ex){
抛出新异常(“无es troba fitxer de propietats”,例如);
}捕获(IOEX异常){
抛出新异常(“carregar fitxer de propietats错误”,ex);
}
字符串驱动程序=props.getProperty(“驱动程序”);
if(driver==null&&System.getProperty(“java.version”).compareTo(“1.6”)<0){
抛出新的异常(“Java obliga a versióde Java definir La propietat driver dins el-fitxer de propietats”);
}
字符串url=props.getProperty(“url”);
如果(url==null){
抛出新异常(“Manca la propietat url en el fitxer de propietats”);
}
字符串user=props.getProperty(“用户”);
字符串密码=props.getProperty(“密码”);
//无控制项!=每个用户无指示用户/对照项(MsAccess)时为空
试一试{
if(驱动程序!=null){
Class.forName(驱动程序);
}
con=DriverManager.getConnection(url、用户、密码);
con.setAutoCommit(假);
}catch(SQLException-ex){
抛出新的异常(“No es pot establir connexió”,ex);
}捕获(ClassNotFoundException ex){
抛出新异常(“无es pot carregar la classe”+驱动程序);
}
}
这是我用来检索记录的函数:

  @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(int sesID){
List citas=new ArrayList();
试一试{
语句st=null;
结果集rs=null;
String consulta=“选择iii.estatinforme,s.numerio,c.diahora,s.perti_NO,s.INFORME_NO,s.POLISSA_ID,s.DATAASSIGNACIO,s.DATAOBERTURA,s.DATATANCAMENT,s.descrippciosinister,s.tipussinstre,s.estathinistre,s.POLISSA_ID,p.municipi从SINISTRE加入POLISSA p on(s.POLISSA_ID=p.ID\u polisa)加入腹膜(pe.numerio=s(c.sinistre_id=s.numero)在(c.sinistre_id=iii.sinistre_id)上左连接InformePerialIII,其中(s.perti_NO=?和(iii.ESTATINFORME='PENDENT'或iii.ESTATINFORME为null或日期格式(c.diahora,%Y-%m')=CURDATE())由c.diahora排序”;
准备好的声明pstmt=合同准备声明(咨询);
pstmt.setInt(1,sesID);
rs=pstmt.executeQuery();
while(rs.next()){
//处理我的阅读。。。
}
pstmt.close();
rs.close();
}catch(SQLException-ex){
Logger.getLogger(JDBCMySQL.class.getName()).log(Level.SEVERE,null,ex);
}
归还建训局;
}
我怀疑它与准备好的语句或查询无关,因为在我停止服务器并再次启动它之后,将使用函数GetCitas()检索新的语句

已编辑:我正在使用的配置文件(jdbcMysql.txt):

url=jdbc:mysql://MyIP:3306/mydb

user=myuser

密码=我的通行证


总而言之,这似乎是一个问题

基本上,只要某个事务没有提交插入或更新的数据,您就无法在另一个程序中看到

同样,只要您的事务处于打开状态,您将始终收到与启动事务时数据库相同的状态

设置autocommit=false后,您很早就在程序中启动了该事务,只要您不
commit()
您的事务,您就会看到相同的快照(至少在默认mysql事务隔离可重复读取的情况下)

这就是为什么在您的选择生效之前手动
commit()
ing您的连接

一致读取

一种读取操作,使用快照信息 基于时间点显示查询结果,而不考虑更改 由同时运行的其他事务执行。如果查询 数据已被另一个事务更改,原始数据为 基于撤销日志的内容重建。此技术 避免了一些可能通过以下方式降低并发性的锁定问题 强制事务等待其他事务完成

关于另一个主题:您的代码可能会从一些清理中受益匪浅-请参阅以下使用try with resource实现的getCitas:

    @Override
    public List<Cita> getCitas(int sesID) {
      List<Cita> citas = new ArrayList<Cita>();
      String consulta = "select iii.estatinforme,s.NUMERO, [...]";
      try (PreparedStatement pstmt = con.prepareStatement()) {
          pstmt.setInt(1, sesID);
          try(ResultSet rs =  pstmt.executeQuery()) {
              while (rs.next()) {
                  //handling my reads...
              }
          }
      } //Closing happend automatically! Even in case of an error!
      catch (SQLException ex) {
          Logger.getLogger(JDBCMySQL.class.getName()).log(Level.SEVERE, null, ex);
      }     
      return citas;
    }
@覆盖
公共列表getCitas(int sesID){
List citas=new ArrayList();
字符串consulta=“select iii.estatinforme,s.NUMERO,[…]”;
try(PreparedStatement pstmt=con.prepareStatement()){
pstmt.setInt(1,sesID);
try(ResultSet rs=pstmt.executeQuery()){
while(rs.next()){
//处理我的阅读。。。
}
}
}//自动关闭happend!即使发生错误!
catch(SQLException-ex){
Logger.getLogger(JDBCMySQL.class.getName()).log(Level.SEVERE,null,ex);
}     
归还建训局;
}

总之,这似乎是一个问题

基本上,只要某个事务没有提交插入或更新的数据,您就无法在另一个程序中看到

同样,只要您的事务处于打开状态,您将始终收到与启动事务时数据库相同的状态

设置autocommit=false后,您启动该事务的时间非常长