MySQL Verständnisproblem mit globalen Variablen (Connection)

Dan1el

Mitglied
Hi,

ich habe ein kleines Programm geschrieben, welches 2 Methoden besitzt.

Mit der ersten Methode schreibe ich Daten in eine Datenbank,
mit der zweiten methode kann ich die Daten auslesen.

Nun im Moment stehe ich vor dem Problem, dass ich immer am Anfang jeder Methode folgendes schreiben muss:

Java:
	try 
 	{
    	Class.forName("com.mysql.jdbc.Driver");
    	Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/db2","root","XXXXX");
 	 	Statement stmt1 = con.createStatement();
.....

Es müsste doch möglich sein, dass ich das oben genannte nur 1 mal aufrufen muss?
Ich habe schon probiert es in eine Methode zu schreiben, allerdings findet er dann die entsprechenden Variablen in den anderen Methoden smt1 oder con nicht mehr.

Hoffe ihr könnt mir da weiterhelfen.

lg Daniel
 
Connection könnte der Rückgabewert der Methode sein oder vereinfacht eine statische Variable,
um die Statement-Zeile kommst du aber nicht herum,
bzw. falls du Connection für nichts anderes brauchst:

Statement stmt1 = Helper.createStatement();
 
Also ich hab jetzt:

Class.forName("com.mysql.jdbc.Driver");

in die Main-Methode geschrieben.

Hier unten sieht man den Quelltext von der Methode1:

Java:
public static void Methode1() 
 {	 
	try
	{
		Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/db2","root","XXX");
	}
	catch (SQLException e) 
 	{
 		System.out.println("Da gabs ein Fehler beim verbinden!");
 		System.out.println("Fehler: "+e.getMessage());
 	}
	String s = einlesen();
 	Statement stmt1 = con.createStatement();	
 	try
	{
 		stmt1.executeUpdate(s);
	}
	catch(SQLException e)
	{
 		System.out.println("Fehler passiert: "+e);
	}
 }

Und beim compilieren bekomme ich diese Meldung:
cannot find symbol
symbol : variable con



Das "Treiberladen" und die Verbindung zur Datenbank soll halt nicht in jeder Methode gemacht werden müssen sondern einfach beim Programmstart, ist das nicht möglich?
Ich möchte so mein Programm übersichtlicher machen.
 
[c]con[/c] ist auch nicht mehr gültig. Die Variable ist nur in dem try-catch Block definiert.

Du kannst dir einen z.B. ConnectionManager defineren:
Java:
public class ConnectionManager{
 
  static {
    try{
        Class.forName("com.mysql.jdbc.Driver");
        } catch(Exception e){
          e.printStacktrace();
          }
  }

  public static Connection getConnection() throws SQLException {
         return DriverManager.getConnection("jdbc:mysql://127.0.0.1/db2","root","XXXXX");

  }

}

Dann kannst du in deinem Code [c]Connection con = ConnectionManager.getConnection()[/c] aufrufen. Besser ist natürlich noch eine ConnectionPool zu nutzen.
 
Siehe mein Posting - kannst natürlich auch da nicht jedesmal eine neue Connection machen sondern immer die gleiche zurückgeben.
 
Hallo,
so löse ich das Ganze:
Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class db {
	
	private String strDbUrl = "localhost";
	private String strDbName = null;
	private int intPort = 3306;
	private String strUser = "root";
	private String strPasswd = "";
	
	private Connection conn = null;
	private Statement stm = null;

	public db(String strDatabase) {
		strDbName = strDatabase;
		this.connect();
	}
	
	public Connection connect () {
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			conn = DriverManager.getConnection(
				"jdbc:mysql://" + strDbUrl + ":" + intPort + "/" + strDbName, strUser, strPasswd);
			System.out.println("Connection established");
		}
		catch(SQLException e) {   
	        System.out.println(e.getMessage());
	        System.out.println(e.getSQLState());
	        System.out.println(e.getErrorCode());
	    }
		catch(Exception e) {      
			System.out.println(e.getClass().toString() +" / "+ e.getMessage());
		}
		return conn;
	}
	
	public ResultSet executeSQL(String sqlStatement){
        try {
        	stm = conn.createStatement();   
            return stm.executeQuery(sqlStatement);
        }
        catch(SQLException e){
            System.out.println(e.getSQLState());
        }
        return null;
    }
	
	public void executeUpdate (String sqlStatement){
		try {
            stm = conn.createStatement();
            stm.executeUpdate(sqlStatement);
        }
        catch (SQLException e){
            System.out.println(e.getSQLState());
        }
    }    
	
	public void disconnect(){
		try {
			if(conn != null)
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

Sobald eine Instanz erzeugt wird, ist die Verbindung aufgebaut und gültig für alle weiteren Methoden.

Vielleicht hilfts dir ja?
Ciao
 

Zurück
Oben