我对我正在运行的代码有疑问。它旨在根据从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(); }
}
}
}
答案 0 :(得分:0)
因此,您的代码实际执行的操作如下:
使用以下语句执行查询:
rs = stmt.executeQuery("SELECT id,Name,State FROM Sensors ORDER BY id DESC");
现在,您的resultset
包含查询结果,resultset
中的第一行是id
最高的一行。
然后转到resultset
的第一行:
while (rs.next())
之后,您会在无限循环中不断刷新特定行:
while (true)
{
rs.refreshRow();
...
你永远不会移动到下一行(永远不会再调用rs.next()
)也不会在你的表中看到任何新插入的行(你没有刷新整个 {{1只有当前行)
当然,当您停止程序并再次运行时 - 执行查询,它会从表中读取新值,第一行的resultset
更高,因此您可以在屏幕上看到预期的结果。
这就是为什么要做的最好的事情就是关闭结果集。并再次执行查询 - 如果要从表中获取新值。
此外,正如评论中的id
所述 - 您应该在线程上使用tadman
在重新查询之间暂停。