Ich hatte eine Frage zu dem Code, den ich ausführe. Es ist beabsichtigt, eine Anzeige basierend auf einem Wert einer Variablen, die aus einer SQL-Datenbank abgerufen wird, zu aktualisieren. Wenn ich den Code ausführe und einen anderen Eintrag in die Tabelle einfüge, ändert sich die Schleife, die die Werte der Tabelle druckt, nicht. Ich bin mir nicht sicher, ob dies der Fall ist, weil der Zeiger in der Tabelle nicht verschoben wurde oder weil der Code eine dynamische Aktualisierung nicht zulässt. Wenn ich den Code beende und erneut lese, werden neue Daten angezeigt. Ich benutze Eclipse.Aktualisieren einer SQL-Datenbank zwischen Abfragen?
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(); }
}
}
}
Wenn Sie nicht auf die while (true) Schleife beziehen sich die Werte zu aktualisieren, dann ist das das richtige Verhalten, da die Ergebnisse bereits aus der Datenbank abgerufen werden. Sollten Sie neue Ergebnisse von der Datenbank benötigen, müssen Sie die Datenbank erneut abfragen. –
Das 'while (true)' Aussehen wird sich wie verrückt drehen. Sie sollten es wirklich drosseln oder Sie haben Tausende von Repaints mit veralteten Daten in der Warteschlange. – tadman
@tadman Was wäre ein effizienter Weg, um die Schleife alle 10 Sekunden auszuführen? –