[połączenie z bazą danych]

[połączenie z bazą danych]
KU
  • Rejestracja: dni
  • Ostatnio: dni
0

W zasadzie połaczyłem sie z bazą danych na localhoscie uzywając:

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package javaapplication1;

import com.mysql.jdbc.Statement;

import java.sql.*;

public class KonektacjaDB
{
public static void main(String args[]) {
Connection KonektacjaDB = null;

try {
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  KonektacjaDB = DriverManager.getConnection("jdbc:mysql://localhost:3306/mojabaza",
    "root", "");

//zapis do bazy danych
Statement Stan_DB = (Statement) KonektacjaDB.createStatement();// dlaczego (Statement)??
Stan_DB.executeUpdate("INSERT INTO xxx VALUES(1,'aaa','bbbb')");

  if(!KonektacjaDB.isClosed())
    System.out.println("szcesliwie połączyłem sie z " +
      "MySQL używając TCP/IP... i wykonałem zapytania");
} catch(Exception e) {
  System.err.println("Exception: " + e.getMessage());

} finally {
  try {
    if(KonektacjaDB != null)
      KonektacjaDB.close();
  } catch(SQLException e) {}
}

}
}

i tu pytanie, chiałbym żeby tą metodą połaczyć sie raz z baza, a nie za każdym razem otwierać połaćzenie i je zamykac. to po pierwsze, ale też nie bardzo mogę wywołać obiektu tej klasy i uzyc go do zapisania np po nacisnieciu przycisku... Samo połaćzenie działa, ale czy możnaby coś pomóc na to żeby było otwierane tylko raz i mógłbym tworzyć zapytania korzystając tylko z

Statement Stan_DB = (Statement) KonektacjaDB.createStatement();// dlaczego (Statement)??
Stan_DB.executeUpdate("INSERT INTO xxx VALUES(1,'aaa','bbbb')");

jako metody??

czy tak sie nie da??

jeżeli chodzi o mój poziom javy to zaczynam... :D

Pozdrawiam

Freakman
  • Rejestracja: dni
  • Ostatnio: dni
0

da sie korzystajac z wzorca singleton. poczytaj o nim.

w skrocie tworzysz prywatny konstruktor w ktorym znajduje sie kod odpowiedzialny za polaczenie.
do tego statyczna zmienna typu tej klasy i publiczna statyczna metode zwracajaca ta zmienna jesli nie jest null a w przeciwnym wypadku uruchamiajaca konstruktor.

KU
  • Rejestracja: dni
  • Ostatnio: dni
0

pobawile

package javaapplication1;
import com.mysql.jdbc.Statement;

import java.sql.*;

public final class Singleton
{
// należy zwrócić uwagę na użycie słowa kluczowego volatile
private static volatile Singleton instance = null;
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}

// żeby uniknąć automatycznego tworzenia domyślnego, publicznego, bezargumentowego konstruktora
private Singleton() {
  String Driver= "com.mysql.jdbc.Driver";
  String url ="jdbc:mysql://localhost:3306/koniesport_cba_pl";
  String username="root";
  String pswd="";
Connection c = null;

try {
  Class.forName(Driver).newInstance();
  c = DriverManager.getConnection(url,
    username, pswd);

//zapis do bazy danych

  • Statement StatDB = (Statement) c.createStatement();* dlaczego (Statement)??
    // StatDB.executeUpdate("INSERT INTO rasy VALUES(5,'wlkp','Wielkopolska')");
    // StatDB.executeUpdate(Zapyt);
    if(!c.isClosed())
    System.out.println("szcesliwie połączyłem sie z " +
    "MySQL używając TCP/IP... i wykonałem zapytania");
    } catch(Exception e) {
    System.err.println("Exception: " + e.getMessage());

    } finally {
    try {
    if(c != null)
    c.close();
    } catch(SQLException e) {}
    }
    }

}
tak to wyglada teraz

KU
  • Rejestracja: dni
  • Ostatnio: dni
0

mam pytanie jeszcze, czy mogę ten singleton wstawić, a potem klasę która bedzie dziedziczyła po singleton, ale oprócz tego bedzie mogłą dokonywać zmian w DB?? czy może w założeniu nie mogę jej rozszerzyć jako że jest statyczną i prywatną, co bedzie jakoś godziło w jej rolę singletonu??

KU
  • Rejestracja: dni
  • Ostatnio: dni
0

w dodatku nie działa... ten kod... wyskakuje że nie można uruchomić bo nie ma metody main, ale o ile rozumiem idee nie może tam byc publicznej metody main...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.