Sqlite DB aus Java Datei ansprechen.

Kotelettklopfer

Bekanntes Mitglied
Hallo zusammen,

im Rahmen meiner "Schulung" habe ich gestern Nacht erfolgreich eine DB mit SQLite aufgebaut und diese auch schon manipuliert.

Nun frage ich mich, wie ich aus einer Java Klasse heraus auf diese DB zugreifen kann um z.b. Werte einer Variablen dort zu speichern.

Im Moment schaffe ich es nur, die DB in intelij zu öffnen und dort selects, imports auszuführen.

Kurz und knapp, wie spreche ich eine DB in einer Klasse an.

Danke euch

Suche brachte mich leider nicht weiter...
 

Kotelettklopfer

Bekanntes Mitglied
Habe die neuste Version davon runtergeladen.
Gestern Nachts kein für mich verständliches Tut. gefunden wie das eingebunden wird.
Schaue gleich nochmal .
Danke Dir
 

Jw456

Top Contributor
Hallo

Erstelle dir doch eine DBHelper Klasse.
In der du Methoden zum einfugen ändern und löschen von Datensätzen anbietest. Für einen Datensatz solltest du auch wieder eine DatenSatz Klasse machen.



In deinem Main Programm erstellt du eine Objekt von der Klasse und kannst deine Methoden nutzen.


 
Zuletzt bearbeitet:

Kotelettklopfer

Bekanntes Mitglied
Ich scheiter leider immer noch an der Einbindung. Habe jetzt aber in meinem Lernkurs gesehen, dass dort mit H2 gearbeitet wird.Wie sind hierzu die Meinungen? Ist H2 eine brauchbare SQL Datenbank?

Dann würde ich erst hiemrit schauen eine Lösung zu schaffen..
 

temi

Top Contributor
Ich scheiter leider immer noch an der Einbindung. Habe jetzt aber in meinem Lernkurs gesehen, dass dort mit H2 gearbeitet wird.Wie sind hierzu die Meinungen? Ist H2 eine brauchbare SQL Datenbank?

Dann würde ich erst hiemrit schauen eine Lösung zu schaffen..
Das Prinzip für den Zugriff mit JDBC sollte gleich sein, egal ob SQLite oder H2. Nur der Treiber ist anders. Das zweite Beispiel von @Jw456 sollte sich leicht auf SQLite anpassen lassen. Ansonsten such einfach nach "jdbc sqlite".
 

Kotelettklopfer

Bekanntes Mitglied
Ich habe jetzt das vorliegende Schulungsbeispiel soweit hinbekommen, dass ich eine neue DB nicht über H2 sondern per SQLite erstelle.
Nachdem die connection geprüft wurde, erstelle ich eine SQL File um dort statements einzutragen.
Ich bekomme allerdings einen Fehler, der in den Schulungsunterlagen nicht vorkam.

Java:
CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));

Ich bekomme allerdings einen Fehler beim create Table "expected one of the following: EDITIONING FORCE FUNCTION NO OR PACKAGE PROCEDURE SEQUENCE TRIGGER TYPE VIEW identifier"

Wieso kann ich denn per create keine Table einfügen?
Kann da jemand helfen?
 

Jw456

Top Contributor
erstelle ich eine SQL File um dort statements einzutragen.
Was du erstellen willst ist eine Tabelle
Die ganze DB ist ein File, Datei. Sqlite besteht aus nur einer Datei in ihr sind dann alle Tabellen ....

Ist das der Statement String zum erstelln der Tabelle?
Zeige das mal kommplet.


CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0))
dienen teil würde ich nicht als ordentliches SQL Statement zum Tabelle erstellen bezeichnen.
sind für mich keine DatenTypen



Hier in meinen ersten link siehst du wie eine Tabelle erstellt wird.
 
Zuletzt bearbeitet von einem Moderator:

Kotelettklopfer

Bekanntes Mitglied
Hmm probiere deine Version jetzt mal aus. Aber irgendwas wird sich Christian Ullenboom dabei gedacht haben und bei ihm funktioniert es.

Einfügen des gesamten Codes geht leider nicht, ist zuviel für den Server :)
 

Kotelettklopfer

Bekanntes Mitglied
Was du erstellen willst ist eine Tabelle
Die ganze DB ist ein File, Datei. Sqlite besteht aus nur einer Datei in ihr sind dann alle Tabellen ....

Ist das der Statement String zum erstelln der Tabelle
Vielleicht ist es so einfacher: Hier mal ein Auszug des originallen Schulungs Codes:

[CODE lang="java" highlight="5"]public class SQL {
public static void main( String[] args ) {
try ( Connection connection = DriverManager.getConnection( "jdbc:h2:file:./mondial" );
Statement statement = connection.createStatement(); ) {
// String filename = "mondial.sql";
// final String sql = Files.readAllLines( Paths.get( filename ) ).stream().collect( Collectors.joining( "\n" ) );
// connection.createStatement().execute( sql );

final ResultSet resultSet = statement.executeQuery( "SELECT * FROM Country" );
while ( resultSet.next() ) {
System.out.printf( "%s %d %.0f%n", resultSet.getString( "Name" ),
resultSet.getInt( "Population" ),
resultSet.getDouble( "Area" ) );[/CODE]

In Zeile 5 wird eine Datei angesprochen. Diese wurde vorher erstellt und dort kommt der Code rein der bei mir Probleme macht.
 

temi

Top Contributor
Das hier ist der wichtige Teil, mit dem eine Verbindung zur DB aufgebaut wird. In diesem Fall halt eine H2-DB.
Java:
try ( Connection connection = DriverManager.getConnection( "jdbc:h2:file:./mondial" );

Du brauchst entsprechend etwas wie
Java:
try ( Connection connection = DriverManager.getConnection( "jdbc:sqlite:C:/sqlite/db/filename.db");
 

Jw456

Top Contributor
Hast du denn deine Tabelle schon erstellt?
der code den du zeigst ist nicht zum erstellen der Tabelle sondern zum lesen aus der Tabelle . Wenn es die noch nicht gibt und auch keinne daten drin sind wie willst du da was lesen?



@temi richtig aber er sagt er hat eine verbindung aufgebaut.
 
Zuletzt bearbeitet von einem Moderator:

Kotelettklopfer

Bekanntes Mitglied
Das versuche ich ja zu erklären :) wenn auch recht Laienhaft.

Der Code, der von mir anfangs gepostet wurde, mit dem fehlerhaften create Table,wird von ihm in die Datei mondial.sql geschrieben und dann noch jede Menge Inhalt für die Tabelle (das sind 300 Zeilen oder so, das Forum lässt mich das nicht hochladen).
Die mondial.sql ist dann genau die File, die er anschließend aufruft mit dem Code der als letztes von mir gepostet wurde.

Garnicht so einfach so nen Start ins Java Leben:)

Mein ursprüngliches Problem war, warum geht bei ihm das create Table und bei mir meckert der Compiler...
 

Jw456

Top Contributor
Das hier ist der wichtige Teil, mit dem eine Verbindung zur DB aufgebaut wird. In diesem Fall halt eine H2-DB.
Java:
try ( Connection connection = DriverManager.getConnection( "jdbc:h2:file:./mondial" );

Du brauchst entsprechend etwas wie
Java:
try ( Connection connection = DriverManager.getConnection( "jdbc:sqlite:C:/sqlite/db/filename.db");
wenn du die Datei schon erstellt hast also eine DB angelerht hast ,müsstest du die richtige zeile kennen.
 

Jw456

Top Contributor
mondial.sql ist deine DB Datei hast du die auf deinen Rechner?
Du kannst die Datei auch mit einen SQLite Viewer öffnen und ansehen.
 

mrBrown

Super-Moderator
Mitarbeiter
SQL:
CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0))

dienen teil würde ich nicht als ordentliches SQL Statement zum Tabelle erstellen bezeichnen.
sind für mich keine DatenTypen



Hier in meinen ersten link siehst du wie eine Tabelle erstellt wird.
Das Statement ist völlig korrekt, das sind ja keine Datentypen, sondern Constraints, wie unschwer zu erkennen an dem "CONSTRAINT ... PRIMARY KEY" und "CONSTRAINT ... CHECK" ;)
 
K

kneitzel

Gast
Die Frage ist aber, was SQLite unterstützt oder eben nicht unterstützt. Ich meine, dass es da durchaus Einschränkungen gibt / gab.

Die Syntax, die funktionieren sollte, kann man z.B. hier sehen:

Ich muss aber gestehen, dass ich SQLite vor einigen Jahren zuletzt benutzt habe - zu c++ Zeiten … und da hat sich einiges geändert.
 

Jw456

Top Contributor
Wenn er wirklich mit seinen Tutorial die DB und Tabelle erstellt hat.
Wäre es ja gut. Da sollten wir erstmal warten was er dazu sagt. Ob es auch so ist.
 

mrBrown

Super-Moderator
Mitarbeiter
Die Frage ist aber, was SQLite unterstützt oder eben nicht unterstützt. Ich meine, dass es da durchaus Einschränkungen gibt / gab.
Das Statement ist so wie es da steht valide.

SQLite kennt halt nicht wirklich Datentypen, sowas ist dann trotz der "Typen" und Constraints möglich:
SQL:
INSERT INTO Country(Code, Name,Area, Population) VALUES (true, 2, 'Foo', 1.23);
 
Zuletzt bearbeitet:

Kotelettklopfer

Bekanntes Mitglied
Erstellt wurde eine Klasse mit diesem Code drin:

[CODE lang="java" highlight="5"]public class SQL {
public static void main( String[] args ) {
try ( Connection connection = DriverManager.getConnection( "jdbc:h2:file:./mondial" );
Statement statement = connection.createStatement(); ) {
String filename = "mondial.sql";
final String sql = Files.readAllLines( Paths.get( filename ) ).stream().collect( Collectors.joining( "\n" ) );
connection.createStatement().execute( sql );

final ResultSet resultSet = statement.executeQuery( "SELECT * FROM Country" );
while ( resultSet.next() ) {
System.out.printf( "%s %d %.0f%n", resultSet.getString( "Name" ),
resultSet.getInt( "Population" ),
resultSet.getDouble( "Area" ) );[/CODE]

Die in Zeile 5 benannte mondial.sql File liegt auf meinem Rechner (diese habe ich ja auch selbst dort angelegt -> Projekt rechtsklick "NEW FILE".

Dort wurde der SQL Code eingetragen so wie er oben steht, mit create Table ... und danach jeder Menge Daten. Im Tutorial wird das File gespeichert, geschlossen und dann über die oben angelegte Klasse angesprochen.
So die Theorie, bei mir schreit das System, dass es ein Fehler sei.

Fehler:
"expected one of the following: EDITIONING FORCE FUNCTION NO OR PACKAGE PROCEDURE SEQUENCE TRIGGER TYPE VIEW identifier"

Der Fehler erscheint nicht beim kompilieren der Klasse sondern in der mondial.sql wird mir das schon unterkringelt.


Zum Thema falsche Vorgehensweise: Der Tutorial Ersteller ist in der Java Szene kein Unbekannter, so hatte doch mal mindestens jeder zweite schon einmal sein Buch in der Hand und der Code funktioniert ja im Tutorial... Aber bei mir nicht.. ich denke es liegt an der neusten Java Version. Kann das sein?

Dachte es sei eine Kleinigkeit und man kommt sofort drauf :) Scheinbar ist das doch eine größere Sache.
Habe auch mal Christian Ullenboom angeschrieben. Ma schauen was bei rumkommt.

Wenn vorab jemand ne Idee hat, her damit :)

Schöne Woche Euch


Ergänzung um die Verwirrung komplett zu machen: HIer handelt es sich um den originalen Tutorial Code mit einer H2 DB. Ich arbeite mit SQLite.. Fehler bleibt aber bei beiden Versionen der gleiche.
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Der Fehler erscheint nicht beim kompilieren der Klasse sondern in der mondial.sql wird mir das schon unterkringelt.
Wie underkringelt in der Datei. Wie mit was schaust du in die Datei?

Frage die Datei wurde von dir mit Java erstellt oder anders?

Wenn anders. Ist sie ach in dem von dir angeben Ordner.

Du sagst es ist eine Sqlite Datei aber beim öffnen in Java willst du eine h2 Datei öffnen.

DriverManager.getConnection( "jdbc:h2:file:./mondial"

Das Modul von h2 wirst du wohl nicht im Projekt haben. Deshalb auch der Fehler.

Schaue weiter oben wie es für Sqlite aussehen soll. Den Pfade auch anpassen sonst wird die Datei beim Öffnen zum Lesen nicht gefunden.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Fehler:
"expected one of the following: EDITIONING FORCE FUNCTION NO OR PACKAGE PROCEDURE SEQUENCE TRIGGER TYPE VIEW identifier"

Der Fehler erscheint nicht beim kompilieren der Klasse sondern in der mondial.sql wird mir das schon unterkringelt.
Zeig mal den genauen Datei-Inhalt, und welche Zeile/Stelle dort bemängelt wird.

ich denke es liegt an der neusten Java Version. Kann das sein?
Nein :)

Ergänzung um die Verwirrung komplett zu machen: HIer handelt es sich um den originalen Tutorial Code mit einer H2 DB. Ich arbeite mit SQLite.. Fehler bleibt aber bei beiden Versionen der gleiche.
Jeder Code den du hier gezeigt hast, arbeitet mit H2 – wenn das gar nicht der Fehlerhafte Code ist, solltest du mal den fehlerhaften zeigen :)
 

Kotelettklopfer

Bekanntes Mitglied
Zeig mal den genauen Datei-Inhalt, und welche Zeile/Stelle dort bemängelt wird.


Nein :)


Jeder Code den du hier gezeigt hast, arbeitet mit H2 – wenn das gar nicht der Fehlerhafte Code ist, solltest du mal den fehlerhaften zeigen :)
Wie gesagt, der Fehler bleibt der gleiche :)
Ich kann den Code aus diser File hier reinposten. Glaube aber der Server würde was dagegen haben. Sind einige Zeilen Code.
Ich versuche das mal zu splitten.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Wie gesagt, der Fehler bleibt der gleiche :)

Und welchen Fehler gibt es zur Laufzeit?

Da wird ja nicht auch die IntelliJ-Warnung angezeigt.


BTW: welche IntelliJ-Version nutzt du und wie hast du die Datasource für die Datei konfiguriert? Das Icon sieht nicht wie das Standard-Icon aus, und der Fehler kann durch eine falsch konfigurierte Datasource hervorgerufen sein.
 

Kotelettklopfer

Bekanntes Mitglied
Und welchen Fehler gibt es zur Laufzeit?

Da wird ja nicht auch die IntelliJ-Warnung angezeigt.


BTW: welche IntelliJ-Version nutzt du und wie hast du die Datasource für die Datei konfiguriert? Das Icon sieht nicht wie das Standard-Icon aus, und der Fehler kann durch eine falsch konfigurierte Datasource hervorgerufen sein.
Das hier ist der Laufzeitfehler

org.h2.jdbc.JdbcSQLSyntaxErrorException: Tabelle "COUNTRY" nicht gefunden
Table "COUNTRY" not found; SQL statement:
SELECT * FROM Country [42102-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:453)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.command.Parser.readTableOrView(Parser.java:7628)
at org.h2.command.Parser.readTableFilter(Parser.java:1970)
at org.h2.command.Parser.parseSelectFromPart(Parser.java:2827)
at org.h2.command.Parser.parseSelect(Parser.java:2959)
at org.h2.command.Parser.parseQuerySub(Parser.java:2817)
at org.h2.command.Parser.parseSelectUnion(Parser.java:2649)
at org.h2.command.Parser.parseQuery(Parser.java:2620)
at org.h2.command.Parser.parsePrepared(Parser.java:868)
at org.h2.command.Parser.parse(Parser.java:843)
at org.h2.command.Parser.parse(Parser.java:815)
at org.h2.command.Parser.prepareCommand(Parser.java:738)
at org.h2.engine.Session.prepareLocal(Session.java:657)
at org.h2.engine.Session.prepareCommand(Session.java:595)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235)
at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:78)
at SQL.main(SQL.java:22)


Datasource wurde im Tutorial nichts drüber gesagt.
Ich schaue mir das nochmal an und gehe die Schritte nochmal durch.
Vielleicht habe ich etwas verpasst.


Wäre ich doch besser bei meinem RPA geblieben xD
 

Jw456

Top Contributor
Zur Laufzeit bei den Fehlern wird es keine Laufzeit geben. Intelli wird den build Prozess nicht fertig stellen.


Frage was nutzt du Gradle oder mavem?

Hast du auch die dependency richtig?
Dein Fehler schaut mir danach aus. Das du h2 hast willst aber Sqlite



PS Dein error log sagt eigentlich das du h2 eingebunden hast brauchst aber Sqlite.

org.h2.jdbc.JdbcSQLSyntaxErrorException: Tabelle "COUNTRY" nicht gefunden
Table "COUNTRY" not found; SQL statement:
SELECT * FROM Country [42102-200]



Die Datei mondial.sql ist nicht deine Datenbank. Das scheint mir nur eine einfache Text Datei mit SQL stadmans zu sein. Die der Autor für das Erstellen und füllen der DB benutzt.

Da dies kein Java Code ist bekommst du in Intelli die roten Linien. Normal.
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
Zur Laufzeit bei den Fehlern wird es keine Laufzeit geben. Intelli wird den build Prozess nicht fertig stellen.
Natürlich baut IntelliJ da trotzdem.

Dein Fehler schaut mir danach aus. Das du h2 hast willst aber Sqlite
PS Dein error log sagt eigentlich das du h2 eingebunden hast brauchst aber Sqlite.
Zu beidem Nein.

Der Code aus #27 läuft mit H2 und SQLite, solange DB und Treiber zueinander passen, was sie offensichtlich tun (sonst gäbe es einen expliziten "Treiber nicht gefunden"-Fehler).

Die Datei mondial.sql ist nicht deine Datenbank. Das scheint mir nur eine einfache Text Datei mit SQL stadmans zu sein. Die der Autor für das Erstellen und füllen der DB benutzt.
So wird die Datei ja auch benutzt.




@Kotelettklopfer teste mal, ob du das erste Statement aus der Datei direkt ausführen kannst, also das Statement einfach direkt im Java-Code, ohne die Datei zu benutzen.

Könnte uU daran liegen, dass die falsche Datei gelesen wird/keine multiplen Statements erlaubt sind/Whatever. Damit könnte man das etwas eingrenzen.
 

mrBrown

Super-Moderator
Mitarbeiter

Kotelettklopfer

Bekanntes Mitglied
Natürlich baut IntelliJ da trotzdem.



Zu beidem Nein.

Der Code aus #27 läuft mit H2 und SQLite, solange DB und Treiber zueinander passen, was sie offensichtlich tun (sonst gäbe es einen expliziten "Treiber nicht gefunden"-Fehler).


So wird die Datei ja auch benutzt.




@Kotelettklopfer teste mal, ob du das erste Statement aus der Datei direkt ausführen kannst, also das Statement einfach direkt im Java-Code, ohne die Datei zu benutzen.

Könnte uU daran liegen, dass die falsche Datei gelesen wird/keine multiplen Statements erlaubt sind/Whatever. Damit könnte man das etwas eingrenzen.
Schaue ich mir nachher zu Hause mal an.
Würde euch gern mit mehr Wissen die Fragen beantworten... Das fehlt mir aber leider noch :)
Und teilweise bin ich verwirrter als vorher xP
 

mrBrown

Super-Moderator
Mitarbeiter
Schaue ich mir nachher zu Hause mal an.
Würde euch gern mit mehr Wissen die Fragen beantworten... Das fehlt mir aber leider noch :)
Und teilweise bin ich verwirrter als vorher xP
Ersetz diese Zeilen:

Java:
            String filename = "mondial.sql";
            final String sql = Files.readAllLines( Paths.get( filename ) ).stream().collect( Collectors.joining( "\n" ) );
            connection.createStatement().execute( sql );

einfach nur mal mit:

Java:
            connection.createStatement().execute( "CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));" );

Damit hat man ein paar mögliche Fehlerquellen schon mal ausgeschlossen.


Alles andere in diesem Thread kannst du erstmal ignorieren ;)
 

Jw456

Top Contributor
Habe es mal getestet
Hiermit bekomme ich kein connect.
Java:
Connection connection = DriverManager.getConnection( „jdbc:h2:file:./mondial.db" );
Weder mit H2 noch mit SQLite

Hiermit ja

Java:
Connection connectiono = DriverManager.getConnection( „jdbc:h2:./mondial.db" );
Connection connection = DriverManager.getConnection( „jdbc:sqlite:./mondial.db" );

Vorausgesetzt beide Libs sind unter dependencies im build.gradle eingebunden.


Java:
implementation group: 'org.xerial', name: 'sqlite-jdbc', version: '3.7.2'
implementation group: 'com.h2database', name: 'h2', version: '1.4.200'

welches kommt darauf an mit was du arbeitren willst H2 oder Sqlite


Das erstellen mit diesem Stadement ging auch H2 u Sqlite
Java:
c.createStatement().execute( "CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));" );



Java:
public class SQLiteJDBC {
    public static void main(String args[]) {

        Connection c = null;
        Statement stmt = null;


        try {
            Class.forName("org.sqlite.JDBC");
            c = DriverManager.getConnection("jdbc:sqlite:./mondial");
            //c = DriverManager.getConnection( "jdbc:h2:./mondial" );
            System.out.println("Opened database successfully");


            c.createStatement().execute("CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));");


            Statement statement = c.createStatement();
            {
                final ResultSet resultSet = statement.executeQuery("SELECT * FROM Country");

                stmt.close();
                c.close();


                System.out.println("Table created successfully");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


    }
}

läuft mit beiden Libs

Hauptfehler erstmal der Pfad beim Connect und vielleicht die falsche LiB.

wurde auch schon von @temi #15 gesagt.

@Kotelettklopfer
interessant wäre zu sehen mit welchen connect Befehl du die DB und Tabelle erstellt hast, nicht das Connect vom Lesen.





 
Zuletzt bearbeitet:

Kotelettklopfer

Bekanntes Mitglied
Ersetz diese Zeilen:

Java:
            String filename = "mondial.sql";
            final String sql = Files.readAllLines( Paths.get( filename ) ).stream().collect( Collectors.joining( "\n" ) );
            connection.createStatement().execute( sql );

einfach nur mal mit:

Java:
            connection.createStatement().execute( "CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));" );

Damit hat man ein paar mögliche Fehlerquellen schon mal ausgeschlossen.


Alles andere in diesem Thread kannst du erstmal ignorieren ;)
So es hat geklappt, habe nur logischerweise noch keinen Output, da ja in der Table kein Inhalt steht.
Aber... Keine FM etc.
 

Kotelettklopfer

Bekanntes Mitglied

Habe es mal getestet
Hiermit bekomme ich kein connect.
Java:
Connection connection = DriverManager.getConnection( „jdbc:h2:file:./mondial.db" );
Weder mit H2 noch mit SQLite

Hiermit ja

Java:
Connection connectiono = DriverManager.getConnection( „jdbc:h2:./mondial.db" );
Connection connection = DriverManager.getConnection( „jdbc:sqlite:./mondial.db" );

Vorausgesetzt beide Libs sind unter dependencies im build.gradle eingebunden.


Java:
implementation group: 'org.xerial', name: 'sqlite-jdbc', version: '3.7.2'
implementation group: 'com.h2database', name: 'h2', version: '1.4.200'

welches kommt darauf an mit was du arbeitren willst H2 oder Sqlite


Das erstellen mit diesem Stadement ging auch H2 u Sqlite
Java:
c.createStatement().execute( "CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));" );



Java:
public class SQLiteJDBC {
    public static void main(String args[]) {

        Connection c = null;
        Statement stmt = null;


        try {
            Class.forName("org.sqlite.JDBC");
            c = DriverManager.getConnection("jdbc:sqlite:./mondial");
            //c = DriverManager.getConnection( "jdbc:h2:./mondial" );
            System.out.println("Opened database successfully");


            c.createStatement().execute("CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));");


            Statement statement = c.createStatement();
            {
                final ResultSet resultSet = statement.executeQuery("SELECT * FROM Country");

                stmt.close();
                c.close();


                System.out.println("Table created successfully");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


    }
}

läuft mit beiden Libs

Hauptfehler erstmal der Pfad beim Connect und vielleicht die falsche LiB.

wurde auch schon von @temi #15 gesagt.

@Kotelettklopfer
interessant wäre zu sehen mit welchen connect Befehl du die DB und Tabelle erstellt hast, nicht das Connect vom Lesen.





Habe jetzt etxra nochmal geschaut und den Code etwas auskommentiert.
Hiermit wird die DB geöffnet

Java:
public class SQL {
    public static void main( String[] args ) {
        try ( Connection connection = DriverManager.getConnection( "jdbc:h2:file:./mondial" );
              Statement statement = connection.createStatement(); ) {
//            connection.createStatement().execute( "CREATE TABLE Country(Name VARCHAR(35) NOT NULL UNIQUE, Code VARCHAR(4), Capital VARCHAR(35), Province VARCHAR(35), Area FLOAT, Population INT, CONSTRAINT CountryKey PRIMARY KEY(Code), CONSTRAINT CountryArea CHECK (Area >= 0), CONSTRAINT CountryPop CHECK (Population >= 0));" );
            System.out.println(connection);
            final ResultSet resultSet = statement.executeQuery( "SELECT * FROM Country" );
            while ( resultSet.next() ) {
                System.out.printf( "%s %d %.0f%n", resultSet.getString( "Name" ),
                        resultSet.getInt( "Population" ),
                        resultSet.getDouble( "Area" ) );
            }
        }
        catch ( SQLException e ) {
            e.printStackTrace();
        }
    }
}

Ob es klappt lass ich mir über System.out.println(connection); ausgeben.

1624901249546.png



Da ich anfangs vergessen habe, Code auszukommentieren, weiß ich das beim ersten Versuch die Tabelle erstellt wurde.
Er meckert nämlich jetzt, das die Table in der Db schon existiert.
 

Kotelettklopfer

Bekanntes Mitglied
Die DB wurde mit dem selben Befehl erstellt. Wenn es die DB noch nicht gibt, wird sie automatisch erstellt im Pfad des Projektes.

Libs passen, die zieh ich mir über dependencies in Maven direkt.
 

Kotelettklopfer

Bekanntes Mitglied
Ja, wenn ich die statements einzeln eintrage geht es.

1624957552342.png

Das Statement besteht aber aus geschätzten 300 Datensätzen. Wie würde man das abrufen? Da wäre die Datei die eingelesen wird ja schon optimaler oder?

Aufjeden Fall schon mal großes Danke !!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java mit SQLite Verbinden Java Basics - Anfänger-Themen 16
D Java und SQLite ? Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
F Warum erhalte ich diese Fehler bei der Einbindung von SQLite JDBC in Eclipse? Java Basics - Anfänger-Themen 1
L SQLITE - Syntax error Java Basics - Anfänger-Themen 3
S Sqlite NPE nach ca. 50 Aufrufen Java Basics - Anfänger-Themen 0
F Erfassung von PCs in eine SQLite-Datenbank über JDBC Java Basics - Anfänger-Themen 9
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben