Auf Firebird 2.0 zugreifen mit Jaybird

Status
Nicht offen für weitere Antworten.

soucy

Mitglied
Hi,

Entweder bin ich einfach nur zu Dumm dazu oder ich mach irgendwas falsch ... ich hab nun das Example rund 5 mal komplett gelesen aber ich blicks einfach nicht :/

Ich habe eine Java Anwendung mit GUI, welche nun mit einer Firebird 2.0 DB über Jaybird 2.1.0 kommunizieren soll. Nun habe ich die firebirdsql-full.jar über Projektoptioen/Build-Path/External Jar's geladen. (eclipse als ide)

Jedoch sobald ich wie in x Beispielen im Netz gefunden, den Treiber bei dem DriverManager registrieren will, bringt es mir nen Fehler. Class.forName( "org.firebirdsql.jdbc.FBDriver" ); -> "Unhandled exception type ClassNotFoundException"

Ich kann eigentlich recht gut Englisch, aber da ich noch nicht so gewandt in Java bin, komme ich mit den Beispielen die ich bisher so gefunden habe einfach nicht zurecht.

Gibt es ein gutes leicht zu verstehendes Beispiel, oder hat hier jemand die Güte mir zu erklären, wie ich es schaffe das ich:

1. Mit meiner Java Anwendung auf die DB ( C:\db.fdb ) zugreifen kann. User: test PW: bla
2. Wie ich Daten aus einer Tabelle lesen, schreiben, löschen und updaten kann

Ich wäre über Hilfe sehr sehr dankbar, da ich seit 5 Tagen einfach nichts hinbekomme im Bezug auf die DB Connection und schon fast am verzweifeln bin ob ich das überhaupt noch schaffe :/
 

abollm

Top Contributor
soucy hat gesagt.:
Hi,

Entweder bin ich einfach nur zu Dumm dazu oder ich mach irgendwas falsch ... ich hab nun das Example rund 5 mal komplett gelesen aber ich blicks einfach nicht :/

Ich habe eine Java Anwendung mit GUI, welche nun mit einer Firebird 2.0 DB über Jaybird 2.1.0 kommunizieren soll. Nun habe ich die firebirdsql-full.jar über Projektoptioen/Build-Path/External Jar's geladen. (eclipse als ide)

Jedoch sobald ich wie in x Beispielen im Netz gefunden, den Treiber bei dem DriverManager registrieren will, bringt es mir nen Fehler. Class.forName( "org.firebirdsql.jdbc.FBDriver" ); -> "Unhandled exception type ClassNotFoundException"

Ich kann eigentlich recht gut Englisch, aber da ich noch nicht so gewandt in Java bin, komme ich mit den Beispielen die ich bisher so gefunden habe einfach nicht zurecht.

Gibt es ein gutes leicht zu verstehendes Beispiel, oder hat hier jemand die Güte mir zu erklären, wie ich es schaffe das ich:

1. Mit meiner Java Anwendung auf die DB ( C:\db.fdb ) zugreifen kann. User: test PW: bla
2. Wie ich Daten aus einer Tabelle lesen, schreiben, löschen und updaten kann

Ich wäre über Hilfe sehr sehr dankbar, da ich seit 5 Tagen einfach nichts hinbekomme im Bezug auf die DB Connection und schon fast am verzweifeln bin ob ich das überhaupt noch schaffe :/

Mann, hast du ein Glück, dass ich mich zufälligerweise mit diesem Kram die letzten Tage herumschlagen musste. Hier ein lauffähiges Beispiel mit Firebird 1.0.3 (V6.2-972). Das Beispiel liest CSV-Daten aus einer Tabelle (fünf Spalten).

Code:
/* Original version of this file was part of InterClient 2.01 examples
 * 
 * Copyright InterBase Software Corporation, 1998.
 * Written by com.inprise.interbase.interclient.r&d.PaulOstler :-)
 * 
 * Code was modified by Roman Rokytskyy to show that Firebird JCA-JDBC driver
 * does not introduce additional complexity in normal driver usage scenario.
 * 
 * An example of using a JDBC 2 Standard Extension DataSource.
 * The DataSource facility provides an alternative to the JDBC DriverManager,
 * essentially duplicating all of the driver manager’s useful functionality.
 * Although, both mechanisms may be used by the same application if desired,
 * JavaSoft encourages developers to regard the DriverManager as a legacy
 * feature of the JDBC API.
 * Applications should use the DataSource API whenever possible.
 * A JDBC implementation that is accessed via the DataSource API is not
 * automatically registered with the DriverManager.
 * The DriverManager, Driver, and DriverPropertyInfo interfaces
 * may be deprecated in the future.
 * 
 * mod. by ABollm
 * 
 */

package ib;

public final class DataSourceExample
{
  static public void main (String args[]) throws Exception
  {
    // Create an Firebird data source manually;
    
	org.firebirdsql.pool.FBWrappingDataSource dataSource = 
        new org.firebirdsql.pool.FBWrappingDataSource();

    // Set the standard properties
    //dataSource.setDatabase ("localhost/3050:c:/database/test_charset.fdb");
    dataSource.setDatabase ("localhost/3050:c:/IB/FBDB.GDB");
    dataSource.setDescription ("An example database of FirebirdDB");

	/*
	 * Following properties were not deleted in order to show differences 
	 * between InterClient 2.01 data source implementation and Firebird one.
	 */
	
    //dataSource.setDataSourceName ("Employee");
    //dataSource.setPortNumber (3060);
    //dataSource.setNetworkProtocol ("jdbc:interbase:");
    //dataSource.setRoleName (null);
    
    // Set the non-standard properties
    //dataSource.setCharSet (interbase.interclient.CharacterEncodings.NONE);
    //dataSource.setSuggestedCachePages (0);
    //dataSource.setSweepOnConnect (false);
	
    // this some kind of equivalent to dataSource.setNetworkProtocol(String)
    // possible values are "type4", "type2" and "embedded".
	dataSource.setType("TYPE4");
    
    // SQL Role can be set like this:
    // 
    // dataSource.setRoleName("USER");
    
    // Character encoding for the connection is set to NONE
    dataSource.setEncoding("ISO8859_1");
    
    // other non-standard properties do not have setters
    // you can pass any DPB parameter
    //
    // dataSource.setNonStandardProperty("isc_dpb_sweep", null);
    // dataSource.setNonStandardProperty("isc_dpb_num_buffers", "75");
	
    // Connect to the Firebird DataSource
    try {
			dataSource.setLoginTimeout(10);
			java.sql.Connection c = dataSource.getConnection("sysdba",
					"masterkey");

			java.sql.Statement stmt = c.createStatement();
			java.sql.ResultSet rs = stmt.executeQuery("SELECT * FROM MyTable");
			while (rs.next()) {
				if (rs.isFirst()) {
					System.out.println("Spalte 1; Spalte2 ...");
				}
			System.out.println("\""+rs.getString(1) + "\";\""
					+ rs.getString(2) + "\";\"" + rs.getString(3)+ "\";\"" + rs.getString(4) 
					+ "\";\"" + rs.getString(5) + "\"");
			}
			stmt.close();

			// At this point, there is no implicit driver instance
			// registered with the driver manager!
			System.out.println("got connection");
			c.close();
		} catch (java.sql.SQLException e) {
			e.printStackTrace();
			System.out.println("sql exception: " + e.getMessage());
		}
  }
}

Du musst eigentlich nur noch die Angaben für die Firebird-DB, die Tabelle und die Login-Angaben auf deine Randbedingungen anpassen.

Hth
 

soucy

Mitglied
Erstmal vielen Dank abollm.

Habe deinen Code nun auf meine DB angepasst.

Wenn ich das Programm nun aber ausführe bringt mir eclipse:

Code:
org.firebirdsql.jdbc.FBDriverNotCapableException: Not yet implemented.
	at org.firebirdsql.jdbc.FBStatementFetcher.first(FBStatementFetcher.java:159)
	at org.firebirdsql.jdbc.FBResultSet.first(FBResultSet.java:1252)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.firebirdsql.pool.ResultSetHandler.invoke(ResultSetHandler.java:70)
	at $Proxy2.first(Unknown Source)
	at FH_PM.main(FH_PM.java:60)sql exception: Not yet implemented.

Was bedeutet dieses "Not yet implemented" ?
 

abollm

Top Contributor
soucy hat gesagt.:
Erstmal vielen Dank abollm.

Habe deinen Code nun auf meine DB angepasst.

Wenn ich das Programm nun aber ausführe bringt mir eclipse:

Code:
org.firebirdsql.jdbc.FBDriverNotCapableException: Not yet implemented.
	at org.firebirdsql.jdbc.FBStatementFetcher.first(FBStatementFetcher.java:159)
	at org.firebirdsql.jdbc.FBResultSet.first(FBResultSet.java:1252)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.firebirdsql.pool.ResultSetHandler.invoke(ResultSetHandler.java:70)
	at $Proxy2.first(Unknown Source)
	at FH_PM.main(FH_PM.java:60)sql exception: Not yet implemented.

Was bedeutet dieses "Not yet implemented" ?

Zunächst kann ich dir auch nicht helfen, denn ich war heilfroh, dass ich nach gut einem Tag die mir gestellte Aufgabe erfolgreich lösen konnte. Ich habe zwar Ahnung von Java und einigen Datenbanken (Oracle, MySQL, MS-Access), aber bezüglich Firebird bin ich Anfänger wie du.

Gut, du hast eine aktuellere Firebird-Version und auch eine neuere Version des JDBC-Treibers als ich. Welche Jar-Files hast du in Eclipse alle in dein Projekt eingebunden?

Die obigen Fehlermeldungen deuten stark darauf hin, dass noch etwas fehlt.

Bei mir sieht das wegen der notwenigen, einzubindenden Jars in Eclipse wie folgt aus (du brauchst hier nur die Jaybird-Jars in den Unterordnern "...Eclipse311\Jaybird\" und "...Eclipse311\Jaybird\lib\" zu beachten):

222217599_95ea6a3015_o.jpg


Irgendwo in der Doku zu den Jaybird-Klassen hatte ich den Hinweis gefunden, dass man alle diese Jar-Dateien für den DB-Zugriff einbinden sollte.

Hoffe das hilft, ansonsten vielleicht hier mit zusätzlichen Informationen erneut fragen.
 

soucy

Mitglied
Ok hab meinen Fehler gefunden :) War einfach nur nen buchstabendreher, den eclipse nicht gemerkt/markiert hat :)

Nun habe ich noch ne Frage und zwar wie kann ich nen String zuschneiden? Also wenn nen String in der DB max. 30 Zeichen haben kann da aber nur ein "Hallo" drinsteht hab ich später in der Java Variable über getString(x); Hallo und zig Leerzeichen bis die 30 Zeichen voll sind.

Wie schneide ich das nun ab?
 

abollm

Top Contributor
soucy hat gesagt.:
[..]
Nun habe ich noch ne Frage und zwar wie kann ich nen String zuschneiden? Also wenn nen String in der DB max. 30 Zeichen haben kann da aber nur ein "Hallo" drinsteht hab ich später in der Java Variable über getString(x); Hallo und zig Leerzeichen bis die 30 Zeichen voll sind.

Wie schneide ich das nun ab?

Das ist eigentlich ganz einfach, hängt allerdings von den Regeln ab, wie genau du den String abschneiden willst. Ich habe hier einmal einen Schnipsel, aus dem du erkennen kannst, wie mit Hilfe von "substring" ein String abgeschnitten wird (vorletzte Zeile Code unten). Eine andere Möglichkeit, die von dir erwähnten Leerzeichen abzuschneiden, geht entweder direkt mit Hilfe von bestimmten SQL-Hilfsfunktionen in der Datenbank (ich kenne mich aber mit Firebird leider nur sehr wenig aus), oder aber direkt mit Hilfe einer Java-Funktion, hier trim(), mit der du allerdings auch die Blanks am Beginn eines Strings entfernst (s. letzte Zeile Code unten):

Code:
[..]
      NurDaten01 d = new NurDaten01();
      d.i = 47;
      d.f = 1.4f;
      d.d = 1.4d;
      //d.bd = 1e12;
      d.b = false;
      d.s = "     <- 5 Blanks + Mein erster String + 10 Blanks ->         ";
  
      //Zuerst Ausgabe des aktuellen Datums
      GregorianCalendar cal = new GregorianCalendar();
      //cal.setTimeZone(TimeZone.getTimeZone("ECT")); 
      printCalendarInfo(cal);
      System.out.println("---\n");
      //Nun Ausgabe der Informationen zum 22.6.1910,
      //dem Geburtstag von Konrad Zuse
      cal.set(Calendar.DATE, 22);
      cal.set(Calendar.MONTH, 5 - 1);
      cal.set(Calendar.YEAR, 1910);
      printCalendarInfo(cal);
      
      System.out.println("---\n");
      System.out.println("Ausgabe NurDaten02 (d):");
      System.out.println("=====================");
      System.out.println("Wert fuer i: "+ d.i);
      System.out.println("Wert fuer d: "+ d.d);
      System.out.println("Wert fuer d * d: "+ sqr(d.d));
      System.out.println("Wert fuer b: "+ d.b);
      System.out.println("Wert fuer s: "+ d.s);
      System.out.println("Substrring fuer s: "+ d.s.substring(0,4));
      System.out.println("String ohne Blnaks am Anfnag und Ende: "+ d.s.trim());
[..]

Die letzte Code-Zeile enthält den Befehl zum Abschneiden (Substring(anfang,ende).

Ansonsten in die API schauen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Verbindungsproblem zu Firebird DB Datenbankprogrammierung 3
C firebird problem Datenbankprogrammierung 5
C Firebird Datenbank Datenbankprogrammierung 2
D PostgreSQL vs Firebird vs Derby Datenbankprogrammierung 12
S Firebird NoClassDefFoundError trotz erfolgreichem Class.forName(...) unter Linux Datenbankprogrammierung 5
T Firebird .fdb: Öffnen und Exportieren Datenbankprogrammierung 1
E Dringend Hilfe Firebird/Jaybird verbindet nicht; im jar file Datenbankprogrammierung 4
K jar Datei startet nicht aufgrund Firebird(?) Datenbankprogrammierung 3
G FireBird installieren Datenbankprogrammierung 3
P fireBird/ IF EXISTS Datenbankprogrammierung 4
D Firebird Embedded dlls Datenbankprogrammierung 3
G Umlaut-Problem mit Firebird Datenbanken Datenbankprogrammierung 8
T Problem beim Update vom Resultset + Firebird Datenbankprogrammierung 2
J Welche Firebird Variante kann ich hosten Datenbankprogrammierung 6
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
L Messenger App - Wie am besten auf Datenbank zugreifen? Datenbankprogrammierung 4
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
L H2 Embedded H2 Datenbank über Netzwerk zugreifen? Datenbankprogrammierung 0
J xampp Datenbank zugreifen mit Java Datenbankprogrammierung 2
D Mit Hibernate (mit Annotation) auf Views zugreifen Datenbankprogrammierung 2
B Auf Datenbank aus dem Internet zugreifen Datenbankprogrammierung 7
S Access 2007 zugreifen- ODBC Driver Manger Datenbankprogrammierung 3
P Lokaler Java Client auf online Datenbank zugreifen Datenbankprogrammierung 2
M Auf MySQL Datenbank mit Java zugreifen Datenbankprogrammierung 4
D auf online DB zugreifen Datenbankprogrammierung 22
F HSQLDB HSQLDB lässt mich nicht auf erstellte Tabelle zugreifen Datenbankprogrammierung 12
G Auf Oracle Schema Name zugreifen Datenbankprogrammierung 7
P Zugreifen auf Derby Datenbank mit java (ÜBERARBEITET) Datenbankprogrammierung 2
E Wie auf eine MySql Datenbank zugreifen Datenbankprogrammierung 25
E Wie auf MS-Access DB zugreifen? Datenbankprogrammierung 8
Y Hibernate - Hbm Files in einem separaten JAR - wie zugreifen Datenbankprogrammierung 6
M Wie auf SQL-Spalte mit mehrdimensionalen Arrays zugreifen? Datenbankprogrammierung 5
S auf views anderer benutzer zugreifen Datenbankprogrammierung 2
S von einer DB auf eine andere Zugreifen. Datenbankprogrammierung 2
N mit jdbc auf datenbank zugreifen Datenbankprogrammierung 2
P ODBC verbindung Java soll auf access mdb datei zugreifen Datenbankprogrammierung 2
W Wie auf Oracle zugreifen? Datenbankprogrammierung 3
R Kann man mit JDBC auch über das Internet auf DB zugreifen? Datenbankprogrammierung 4
F Von Aussen auf MySQL zugreifen Datenbankprogrammierung 2
G Auf Excel zugreifen Datenbankprogrammierung 4
M Mit Java Applet via HDBC auf MySQL DB zugreifen? Datenbankprogrammierung 2
R JAVA-Prog auf Datenbank-Server zugreifen Datenbankprogrammierung 3
G Mit JDBC-ODBC-Bridge auf entfernten Rechner zugreifen? Datenbankprogrammierung 2

Ähnliche Java Themen


Oben