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();
}
Jak wyświetlić dane w JComboBox z bazy danych
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6824
Co dokładanie nie działa? Czy poleciał jakiś wyjątek czy też nie wiesz jak przełożyć otrzymane rezultaty na JComboBox?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6824
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.
- Rejestracja: dni
- Ostatnio: dni
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ć ?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6824
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ć.
- Rejestracja: dni
- Ostatnio: dni
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)
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6824
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.
- Rejestracja: dni
- Ostatnio: dni
- 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.
- Rejestracja: dni
- Ostatnio: dni
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)