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
 
S

SlaterB

Gast
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();
 

Dan1el

Mitglied
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.
 
G

Gast2

Gast
[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.
 
G

Gast2

Gast
Siehe mein Posting - kannst natürlich auch da nicht jedesmal eine neue Connection machen sondern immer die gleiche zurückgeben.
 

kinglui

Aktives Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Verständnisproblem warum em.flush() notwendig ist hier Datenbankprogrammierung 6
Kirby.exe Verständnisproblem bei SQL Abfrage Datenbankprogrammierung 27
X Hibernate Cache Verständnisproblem Datenbankprogrammierung 0
S Verständnisproblem DAO Datenbankprogrammierung 5
S Verständnisproblem mit mehreren DAOs Datenbankprogrammierung 7
M JPA Verständnisproblem - persist(), merge(), getReference() Datenbankprogrammierung 15
E H2 - Globalen Zugriff auf die Datenbank? Datenbankprogrammierung 10
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
C Oracle Bind Variablen (benannt) Datenbankprogrammierung 6
D MySQL Client - Server: Client verabschiedet sich sobald ich Variablen im SQL Statement verwende Datenbankprogrammierung 9
S SQL inner join bei >10 Tabellen über 2 Variablen Datenbankprogrammierung 2
T Daten aus DB in variable Zahl an Variablen speichern Datenbankprogrammierung 18
G DB Modellierung mit variablen Attributen in der Tabelle Datenbankprogrammierung 4
L oracle:ORA-01008: Nicht allen Variablen ist ein Wert zugeord Datenbankprogrammierung 1
X HSQLDB und Variablen Datenbankprogrammierung 7
A java & mysql abfrage mit variablen auswerten, wie? Datenbankprogrammierung 8
G Syntax für Select - Abfrage mit Variablen Datenbankprogrammierung 39
H Variablen übergeben Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben