有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在查询之间更新SQL数据库?

我对我正在运行的代码有一个问题。它旨在根据从SQL数据库检索的变量值更新显示。当我运行代码并向表中插入另一个条目时,打印表值的循环不会改变。我不确定这是因为表中的指针没有移动,还是因为代码不允许动态更新。当我终止代码并重新运行时,将显示新数据。我正在使用eclipse

import java.awt.Graphics;
import javax.swing.JFrame;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Tutorial1 extends JFrame 
{
    static String State; 
      public Tutorial1()
      {
             setTitle("Tutorial1");
             setSize(900, 900);
             setVisible(true);
             setDefaultCloseOperation(EXIT_ON_CLOSE);
      }

      public void paint(Graphics g)
      {


          if (State.equals("0"))
          {
          g.drawRect(480, 480, 200, 100);
          }

          if (State.equals("1"))
          {
             g.fillRect(240, 240, 200, 100);
          }


      }


       public static void main(String[] args)
       {

           Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                new com.mysql.jdbc.Driver();
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                    String connectionUrl = "jdbc:mysql://localhost:3306/capstone";
                String connectionUser = "root";
                String connectionPassword = "root";
                conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword);
                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                rs = stmt.executeQuery("SELECT id,Name,State FROM Sensors ORDER BY id DESC");

                {       

                while (rs.next()) {


                    Tutorial1 t = new Tutorial1();
                    //t.paint(null);

                     while (true) 
                    {

                         rs.refreshRow();
                         rs.updateRow(); 


                         String id = rs.getString("id");
                            String Name = rs.getString("Name");
                             State = rs.getString("State");
                            System.out.println("ID: " + id + ",Name: " + Name
                                    + ", State: " + State);

                            id = "id+1"; 

                        System.out.println("Success");
                        System.out.println(State);

                        t.repaint();

                    }

                }


            }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {




                //try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); }
            //  try { if (stmt != null) stmt.close(); } catch (SQLException e) { e.printStackTrace(); }
                //try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
            }            
       } 
}

共 (1) 个答案

  1. # 1 楼答案

    因此,您的代码实际上执行以下操作:

    1. 使用以下语句执行查询:

      rs = stmt.executeQuery("SELECT id,Name,State FROM Sensors ORDER BY id DESC");

      现在resultset保存查询结果,resultset中的第一行是id最高的一行

    2. 然后转到resultset的第一行:

      while (rs.next())

    3. 之后,您将在无限循环中不断刷新特定行

      while (true) { rs.refreshRow(); ...

    您永远不会移动到下一行(不再调用rs.next()),也不会在表中看到任何新插入的行(您不会刷新整个resultset,只刷新当前行)

    当然,当您停止程序并再次运行时——查询执行时,它会从表中读取新值,第一行的id值较高,因此您可以在屏幕上看到预期的结果

    这就是为什么最好的办法就是关闭结果集。然后再次执行一个查询——如果您想从表中获取新值

    此外,正如注释中的tadman所述,您应该在线程上使用sleep在重新查询之间暂停