Java mysql Hilfe (permanente Abfrage)

ciubic

Mitglied
Hallo

Ich beschäftige mich seit kurzem mit Java und ich wollte ein kleinen abfrage script einer mysql db machen :

Code:
 /*
* abfrage_1.java
*
* Created on 06. April 2005, 20:19
*/
package mysql_1;
import java.sql.*;
/**
*
* @author CiubiC
*/
 
public class Main {
public static void main(String args[]) {
 
	Connection con = null;
	Statement sta = null;
	ResultSet rs = null;
	try {
	 Class.forName("org.gjt.mm.mysql.Driver").newInstance();
	 con = DriverManager.getConnection("jdbc:mysql://64.27.1.138/dev_java", "****", "*****");
	 sta = con.createStatement();
 
 
	 rs = sta.executeQuery("SELECT * FROM javatest");
 
	 while (rs.next())
	 {
		 int ID = rs.getInt(1);
		 String von = rs.getString(2);
		 String zu = rs.getString(3);
		 String text = rs.getString(4);
		 String zeit = rs.getString(5);
 
		 System.out.println(ID+ " Nachricht " + von + " zu " + zu + " : " + text + " um " +zeit);
	 }
	} catch(Exception e) {
	 System.err.println("Fehler: " + e.getMessage());
	} finally {
	 try {
 
		 if(rs != null)
			 rs.close();
		 if(sta != null)
			 sta.close();
		 if(con != null)
			 con.close();
	 } catch(SQLException e) {}
	}
}
}

So wie es hier steht läuft es perfekt.

Ausgabe:

Code:
 1 Nachricht Julnisch zu Tinokl : hi was los wappler hu hu um 20:12
2 Nachricht tinokl zu julnisch : nix was soll sein :=) um 20:16
3 Nachricht julnisch zu Tinokl : fjkghfdkjdfhgkfd um 234
4 Nachricht dsfsdfs zu dfdsf : dsfsdf um dsfsdfsd
5 Nachricht dsfdsf zu dsfdsf : sdfdsfds um dsfsdf

Nun jetzt meine Frage wie schaffe ich es das er permanent abfragt also wenn ich in der db neue Einträge mache werden diese nur ausgegeben wenn ich das script neu starte.

Ist es möglich das ich die db permanent abfrage das er es sofort ausgibt oder alle 10ms.

Ich will jedoch nur bei der ersten abfrage verbinden (dauert länger).

Ich habe es mit update und mit while versucht aber bin gescheitert.

Ich hoffe es gibt eine einfache Antwort.


Danke
lg
ciubic
 
Zuletzt bearbeitet:
lol also ich habs nicht wirklich hin bekommen ich glaube ich hab da was falsch verstanden.


ich habe es jetzt so:

Code:
 /*
* abfrage_1.java
*
* Created on 06. April 2005, 20:19
*/
package mysql_1;
import java.sql.*;
import java.util.*;
/**
*
* @author CiubiC
*/
 
public class abfrage_frame_1 {
public static void main(String args[]) {
 
	Connection con = null;
	Statement sta = null;
	ResultSet rs = null;
	try {
	 Class.forName("org.gjt.mm.mysql.Driver").newInstance();
	 con = DriverManager.getConnection("jdbc:mysql://64.27.1.138/dev_java", "***", "****");
	 sta = con.createStatement();
		class Task extends TimerTask 
		{
		 public void run() 
		 {
		 rs = sta.executeQuery("SELECT * FROM javatest");
 
		 while (rs.next())
			 {
				int ID = rs.getInt(1);
				String von = rs.getString(2);
				String zu = rs.getString(3);
				String text = rs.getString(4);
				String zeit = rs.getString(5);
 
				System.out.println(ID+ " Nachricht " + von + " zu " + zu + " : " + text + " um " +zeit);
			 }
		 }
		}
 
	 Timer timer = new Timer();
	// nach 2 Sek geht’s los
	 timer.schedule ( new Task(), 2000 );
	// nach 1 Sek geht’s los und dann alle 5 Sekunden
	 timer.schedule ( new Task(), 1000, 5000 );
 
 
	} catch(Exception e) {
	 System.err.println("Exception: " + e.getMessage());
	} finally {
	 try {
 
		 if(rs != null)
			 rs.close();
		 if(sta != null)
			 sta.close();
		 if(con != null)
			 con.close();
	 } catch(SQLException e) {}
	}
 
}
}
ich bekomme 8 Fehler.
 
Zuletzt bearbeitet:
Code:
Code:
 /*
 * abfrage_1.java
 *
 * Created on 06. April 2005, 20:19
 */
package mysql_1;
import java.sql.*;
import java.util.*;
/**
 *
 * @author CiubiC
 */

public class abfrage_frame_1 {

public void toRun(){
	Connection con = null;
	Statement sta = null;
	ResultSet rs = null;
	try {
	  Class.forName("org.gjt.mm.mysql.Driver").newInstance();
	  con = DriverManager.getConnection("jdbc:mysql://64.27.1.138/dev_java", "***", "****");
	  sta = con.createStatement(); 
                   rs = sta.executeQuery("SELECT * FROM javatest");
	  
		   while (rs.next())
			 {
				int ID = rs.getInt(1);
				String von = rs.getString(2);
				String zu = rs.getString(3);
				String text = rs.getString(4);
				String zeit = rs.getString(5);
		  
				System.out.println(ID+ " Nachricht " + von + " zu " + zu + " : " + text + " um " +zeit);
			 }
	} catch(Exception e) {
	  System.err.println("Exception: " + e.getMessage());
	} finally {
	  try {
		
		  if(rs != null)
			  rs.close();
		  if(sta != null)
			  sta.close();
		  if(con != null)
			  con.close();
	  } catch(SQLException e) {}
	}
}
  public static void main(String args[]) {
  Timer t=new Timer();
  t.schedule(toRun, 5000);// nach 5 Sekunden wird toRun ausgeführt.
  t.cancel();
  }
}


So sollte es gehn.Könnte sein das noch irgendwo ein { zuviel oder zuwenig is.
Aber das findeste bei bedarf schnell. =)

mehr dazu auch:
http://www.dpunkt.de/java/Referenz/Das_Paket_java.util/55.html
 
Ich würde folgende Methode myconnect(),myquery() und myclose() entwerfen.
Wenn Du keine Konstruktor verwendest dann so ähnlich. (Hab gerade kein J2SE zur hand da Arbeitsrechner in rep.)
Also könnte ungefähr so aussehen.
Code:
public class abfrage_frame_1 { 
// Globale Variablen
    Connection con = null;
    Statement sta = null;
    ResultSet rs = null;
// Konsturktor
// ...
//Methoden
 public void myconnect(){
        try { 
        Class.forName("org.gjt.mm.mysql.Driver").newInstance();
        con = DriverManager.getConnection("jdbc:mysql://64.27.1.138/dev_java", "***", "****");
        }catch(Exception e){
            // Meldung           
        }
 }
 public void myclose(){
      try {
      con.close();
      } catch(SQLException e) {}
    }
 }
 public void myquery(){
    try {
      sta = con.createStatement(); 
                       rs = sta.executeQuery("SELECT * FROM javatest");
      
       while (rs.next())
     {
    int ID = rs.getInt(1);
    String von = rs.getString(2);
    String zu = rs.getString(3);
    String text = rs.getString(4);
    String zeit = rs.getString(5);
      
    System.out.println(ID+ " Nachricht " + von + " zu " + zu + " : " + text + " um " +zeit);
     }
    } catch(Exception e) {
      System.err.println("Exception: " + e.getMessage());
 }
 public static void main(String[] args) { 
        this.myconnect();
        Timer t=new Timer();
        t.schedule( this.myquery, 5000);// nach 5 Sekunden wird toRun ausgeführt.
        t.cancel();
        this.myclose();
}

}
Alternativ könntest Du anstatt globalen Variablen zu benutzen lokale immer mit übergeben aber bei programmieren aufm Papier siegt doch eher die Faulheit. ;)
 
Zuletzt bearbeitet:
Danke ich teste es gerade

Also ich kann es nicht compilen

es sagt :


29: 'class' or 'interface' expected
public void myquery(){
 
Auch danke an NomadSoul jedoch habe ich da ach probleme mit der Zeile:

t.schedule(toRun, 5000);// nach 5 Sekunden wird toRun ausgeführt.

Es geht auch nicht mit this. und mit ()

er sagt immer:

symbol : variable toRun
t.schedule(toRun, 5000);// nach 5 Sekunden wird toRun ausgeführt.
1 error
BUILD FAILED (total time: 0 seconds)

oder

52: non-static variable this cannot be referenced from a static context
t.schedule(this.toRun, 5000);// nach 5 Sekunden wird toRun ausgeführt.

Ich glaube ich brauche noch viel Übung nur kann mir wer sagen was ich da falsch kopiert habe

Danke
 
Zuletzt bearbeitet:
also der Fehler lag bei mir sorry

Du brauchst 2 Klassen!
die die Du ausführen möchtest, und eine Start Klasse.
Die die Du ausführen willst must Du von der Klasse TimerTask ableiten, btw muss diese erweitern. Dort muss auch eine Methode Definiert sein die run() heißt, dies führt der Timmer dann aus.

Start Klasse:
Code:
package test; // wichtig beide Klassen im selben Package
import java.util.*;
public class Test {
	
	  public static void main(String args[]) {
	 
	  Timer t=new Timer();
	  t.schedule(new MsqL(), 5000);// nach 5 Sekunden wird toRun ausgeführt.
	  t.cancel();
	  }
	}


Abgeleitete Klasse:
Code:
package test; // wichtig beide Klassen im selben Package

import java.sql.*;
import java.util.*;

public class MySql extends TimerTask {
	public void run(){
		Connection con = null;
		Statement sta = null;
		ResultSet rs = null;
		try {
		  Class.forName("org.gjt.mm.mysql.Driver").newInstance();
		 con = DriverManager.getConnection("jdbc:mysql://64.27.1.138/dev_java", "***", "****");
		  sta = con.createStatement(); 
	                   rs = sta.executeQuery("SELECT * FROM  javatest");
		  
			   while (rs.next())
				 {
					int ID = rs.getInt(1);
					String von = rs.getString(2);
					String zu = rs.getString(3);
					String text = rs.getString(4);
					String zeit = rs.getString(5);
			  
					System.out.println(ID+ " Nachricht " + von + " zu " + zu + " : " + text + " um " +zeit);
				 }
		} catch(Exception e) {
		  System.err.println("Exception: " + e.getMessage());
		} finally {
		  try {
			
			  if(rs != null)
				  rs.close();
			  if(sta != null)
				  sta.close();
			  if(con != null)
				  con.close();
		  } 
		  catch(SQLException e) {
		  	}
		}
	}
}
 
Zurück