Witam,
Pewnie dość zaskakujący temat,ale nie wiem jak utowrzyć w Javie połączenie z bazą danych tak abym mógł za pomocą SELECT'a podpiąć dane z bazy danych do JComboBox.
Czytałem na 4programmers.net na ten tamat ale coś mi nie wychodzi...
Oto mój blok kodu:
try
{
Class.forName("org.firebirdsql.jdbc.FBDriver");
}
catch (ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
}
try
{
Connection conn = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/E:/Projekty Java/Agro Studio/Agro Bydlo/engine/engine.fdb", "sysdba", "masterkey");
String query = "SELECT NAME from TEST";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
{
String Nazwa = rs.getString("NAME");
System.out.println("Nazwa użytkownika " + Nazwa);}
}
catch (SQLException se)
{
se.printStackTrace();
}
Co dokładanie nie działa? Czy poleciał jakiś wyjątek czy też nie wiesz jak przełożyć otrzymane rezultaty na JComboBox?
nie wiem jak otrzymać rezultaty w JComboBox z bazy danych
Teraz już jasne :)
JComboBox ma metodę addItem(Object obj). Wystarczy zatem taki kod:
JComboBox jcb = new JComboBox();
while (rs.next()) {
String nazwa = rs.getString("NAME");
jcb.addItem(nazwa);
}
Jeżeli jednak chcesz łączyć z wybranym elementem jakąś akcje może warto zdefiniować klasę której obiekty będziesz dodawał do listy. Możesz wtedy przeładować metodę toString() aby zwracała to co ma być wypisane jako nazwa pola.
Dzięki za pomoc
Widze że się orientujesz w tych sprawach a więc mam jeszcze pytanie:
Robię program, który jak widać będzie opierał się na bazie danych i teraz chyba bezsensu jest podawanie twardej lolalizacji bazy danych...To nie można zrobić url do db w odzielnym pliku tak aby za pomocą instalator można w łatwy sposób to skonfigurować ?
Poczytaj o obiekcie i plikach Properties. Generalnie działa to na zasadzie definiowania w pliku w osobnych rekordach konstrukcji klucz=wartość możesz więc zdefiniować tam parametry połączenia. Jednak musisz pamiętać iż to sa zwykłe pliki tekstowe, należy je więc troszkę zaszyfrować.
Nic mi nie wychodzi :-[
W JComboBox są standardowe Item'y a jak wybiorę jeden z nich to otrzymuję:
java.lang.ClassNotFoundException: org.firebirdsql.jdbc.FBDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
A to teraz wiadomo :) Nie może znaleźć drivera do bazy danych.
Spróbuj zarejestrować sterownik w systemie:
Class.forName(driverName);
System.setProperty("jdbc.driver", "org.firebirdsql.jdbc.FBDriver");
poza tym należy dodać jara z klasą sterownika do patha systemowego.
- jesli piszesz w jakimś sensownym IDE (eclipse, netbeans) to dołączasz dobie jar'a ze sterownikiem do projektu i już.
później tworzysz sobie jakąś metodkę, np.
void wczytajSterownik(){
try {
Class.forName("org.firebirdsql.jdbc.FBDriver").newInstance();
JOptionPane.showMessageDialog(null,"Poprawnie zaladowano sterownik...","Info...",JOptionPane.INFORMATION_MESSAGE);
}catch (Exception E){
System.err.println("Unable to load driver.");
JOptionPane.showMessageDialog(null,"Unable to load driver.","Info...",JOptionPane.INFORMATION_MESSAGE);
E.printStackTrace(); }
}
która wczyta Ci sterownik
- łączysz się z bazą
String wywolanie="jdbc:firebirdsql:localhost:"+adresBazy; //adresBazy taki jaki masz, ja sobie wybierałem plik z JFileChooser'a
Connection polaczenie = DriverManager.getConnection(wywolanie,"SYSDBA", "masterkey");
- wykonusz zapytanie i umieszczasz wyniki w JComboBox:
JComboBox auta=new JComboBox();
Statement zapytanie=polaczenie.createStatement();
try {
String query="select popis from pojazdy where ptel in"+
"(select distinct ttel from tank)";
ResultSet wynik=zapytanie.executeQuery(query);
while(wynik.next()) {
auta.addItem(wynik.getString("Nazwa_Kolumny"));
}
zapytanie.close();
}catch(SQLException x) {System.out.println("wyjatek - wczytajAuta()");}
i juz...
pzdr.
No to piszę w netbeans (bo w eclipse nie umiem sobie skonfigurować środowiska GUI - tak na marginesie jak kogoś z użytkowników zastanawiałoby czemu akurat w netbeans) no i mój ciąg dalszy zmagań to robię tak napisaliście. Dodałem do Libraries cały plik z sterownikiem o nazwie .jar i teraz przeanalizowałem jeszcze raz kod próbuję i jest to samo z tym, że teraz mam błąd o nazwie:
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544344. I/O error for file %.0s"CreateFile (open)"
null
Error while trying to open file
null
Reason: I/O error for file %.0s"CreateFile (open)"
null
Error while trying to open file
null
at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:122)
at org.firebirdsql.jdbc.FBDriver.connect(FBDriver.java:131)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)