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

时间:2017-04-22 20:01:24

标签: java mysql eclipse resultset

我对我正在运行的代码有疑问。它旨在根据从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 个答案:

答案 0 :(得分:0)

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

  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(); ...

  4. 你永远不会移动到下一行(永远不会再调用rs.next())也不会在你的表中看到任何新插入的行(你没有刷新整个 {{1只有当前行

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

    这就是为什么要做的最好的事情就是关闭结果集。并再次执行查询 - 如果要从表中获取新值。

    此外,正如评论中的id所述 - 您应该在线程上使用tadman在重新查询之间暂停。