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 楼答案
因此,您的代码实际上执行以下操作:
使用以下语句执行查询:
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()
),也不会在表中看到任何新插入的行(您不会刷新整个resultset
,只刷新当前行)当然,当您停止程序并再次运行时——查询执行时,它会从表中读取新值,第一行的
id
值较高,因此您可以在屏幕上看到预期的结果这就是为什么最好的办法就是关闭结果集。然后再次执行一个查询——如果您想从表中获取新值
此外,正如注释中的
tadman
所述,您应该在线程上使用sleep
在重新查询之间暂停