SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt?

berndoa

Top Contributor
Hallo, ich habe folgenden Code den ich dank der Hilfe hier zusammengeschustert habe:
Klasse Test1:
Java:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.sqlite.SQLiteDataSource;

public class Test1 {
    SQLiteDataSource ds = null;
    Connection conn = null;
    Statement stmt = null;

    public static void main(String[] args) {
        try {
            Test1 a = new Test1();
            // a.deleteTables();
            // a.createTables();
            a.fill2();
            /*
             * ResultSet rs = a.execQuery("SELECT Count(DISTINCT SixtupleId) FROM Tuples");
             * System.out.println("A"); while (rs.next()) {
             * System.out.println(rs.getString(1)); } a.closeAll();
             */
            a.conn.commit();
            a.closeAll();
        } catch (Exception e) {
        }
    }

    public Test1() {

        try {
            ds = new SQLiteDataSource();
            ds.setUrl("jdbc:sqlite:test2.db");
            conn = ds.getConnection();
            stmt = conn.createStatement();

            conn.setAutoCommit(false);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("Opened database successfully");

    }

    public void createTables() {
        try {
            String query = "CREATE TABLE IF NOT EXISTS Tuples (" + "SixtupleId STRING NOT NULL,"
                    + " TripleId STRING NOT NULL)";
            execUpdate(query);

            query = "CREATE TABLE IF NOT EXISTS ConCount (" + "TripleID STRING NOT NULL,"
                    + "Occurences INTEGER NOT NULL)";
            execUpdate(query);
            conn.commit();

        } catch (Exception e) {
        }
    }

    public void deleteTables() {
        try {
            execUpdate("DROP TABLE IF EXISTS 'Tuples' ");
            execUpdate("DROP TABLE IF EXISTS 'ConCount' ");
            conn.commit();
        } catch (Exception e) {
        }
    }

    public void closeAll() {
        try {
            stmt.close();
        } catch (Exception e) {
        }
        try {
            conn.close();
        } catch (Exception e) {
        }
    }

    public void execUpdate(String query) {
        try {
            int rv = stmt.executeUpdate(query);
            System.out.println("executeUpdate() returned " + rv);
        } catch (SQLException e) {
            e.printStackTrace();
            System.exit(0);
        }
        // System.out.println("Executed Code: " + query);

    }

    /*
     * public ResultSet execQuery(String query) { try { ResultSet rv =
     * stmt.executeQuery(query); System.out.println("executeUpdate() returned " +
     * rv); return rv; } catch (SQLException e) { e.printStackTrace();
     * System.exit(0); } System.out.println("Error with Query!"); return null;
     *
     * }
     */

    public String toString(int[] xTupel) {

        StringBuilder builder = new StringBuilder();
        for (int x : xTupel) {
            builder.append(x);
            builder.append(".");
        }
        return builder.toString();
    }


    public void fill2() {
        try {

            int count = 0;

            NumberGenerator numg = new NumberGenerator(6, 1, 49);

            int batchSize = 1000;
            int currentSize = 0;
            PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Tuples (SixtupleId, TripleId) VALUES (?,?)");
            int[] tripel = null;
            int[] sixtupel = numg.getNumberb();
            count++;
            do {

                System.out.println(toString(sixtupel));

                // sixTupel

                for (int i1 = 0; i1 < sixtupel.length - 2; i1++) {
                    for (int i2 = (i1 + 1); i2 < sixtupel.length - 1; i2++) {
                        for (int i3 = (i2 + 1); i3 < sixtupel.length; i3++) {
                            tripel = new int[] { sixtupel[i1], sixtupel[i2], sixtupel[i3] };

                            // hier musst du halt deine Zahlen vorbereiten
                            pstmt.setString(1, toString(sixtupel));
                            pstmt.setString(2, toString(tripel));
                            // das fügt das statement zu deiner batch hinzu
                            pstmt.addBatch();

                            currentSize++;
                            if (currentSize == batchSize - 2) {
                                // falls das batch voll ist führ es aus
                                // batches nicht zu groß machen, lieber öfter abschicken
                                pstmt.executeBatch();
                                // System.out.println("Sent batch at count=" + count);
                                currentSize = 0;
                            }
                        }

                    }
                }

                sixtupel = numg.getNumberb();
                count++;
            } while (sixtupel != null);
            pstmt.executeBatch();
            System.out.println("Generated " + count + " different Sixtupels!");
            // conn.commit();

        }

        catch (Exception e) {
            e.printStackTrace();
        }

    }
}


Und Klasse NumberGenerator:
Java:
import java.util.Arrays;

public class NumberGenerator {
    int length = 6;
    int maxNum = 49;
    int minNum = 1;

    byte[] a;
    int[] b;

    public NumberGenerator(int length, int minNum, int maxNum) {
        this.length = length;
        this.minNum = minNum;
        this.maxNum = maxNum;
        a = new byte[length];
        for (byte i = 0; i < a.length; i++) {
            a[i] = (byte) (i + 1);
        }
        b = new int[length];
        for (int i = 0; i < a.length; i++) {
            b[i] = (int) (i + 1);
        }

    }

    public static void main(String[] args) {
        NumberGenerator q = new NumberGenerator(3, 1, 49);
        q.printb();
    }


    public boolean endReachedb() {
        if (b[b.length - 1] < maxNum) {
            return false;
        }
        for (int i = b.length - 1; i > 0; i--) {
            if (b[i] > b[i - 1] + 1) {
                return false;
            }
        }

        return true;
    }



    public int[] copyb() {
        if (b == null) {
            return null;
        }
        int[] c = new int[b.length];
        for (int i = 0; i < b.length; i++) {
            c[i] = b[i];
        }
        return c;
    }



    public void printb() {

        int z = 0;
        int[] q = getNumberb();

        while (q != null) {
            z = z + 1;
            System.out.println(Arrays.toString(q));
            q = getNumberb();
        }
        System.out.println("Total of " + z + " numbers found!");
    }


    public int[] getNumberb() {
        int[] d = copyb();
        if (d == null) {
            return null;
        }
        if (endReachedb()) {
            b = null;
        } else {
            int c = b.length - 1;
            while (c >= 0 && b[c] == maxNum - (length - c - 1)) {
                c--;
            }

            b[c] = b[c] + 1;
            for (int i = c; i < b.length; i++) {
                b[i] = b[c] + (i - c);
            }

        }
        return d;
    }

}

Kurz zur Erklärung:
Ich benutze SQlite und den jdbc Server Kram um an einer test2.db SQL Datenbank rumzuwerkeln.
Die beiden dort vorkommenden Tabellen sind:
SQL:
CREATE TABLE Tuples (
    SixtupleId STRING NOT NULL,
    TripleId   STRING NOT NULL
);

CREATE TABLE ConCount (
    TripleID   STRING  NOT NULL,
    Occurences INTEGER NOT NULL
);

Mein Test1 Programm soll erst eine Verbindung zu Datenbank, Tabellen und Co. herstellen, dann die 2 Tabellen erstellen und die "Tuples" Tabelle dann mit 2 Spalten SixtupleId und TripleId befüllen.

Hierzu wird in der "fill2" Methode alle möglichen Sixtuple (Also die Zahlentupel (1,2,3,4,5,6) bis (44,45,46,47,48,49)) durchgegangen und mit allen jeweils darin enthaltenen Tupel kombiniert.

Jede solche Kombination kommt in die Tabelle.

Ergebnis sieht dann so aus:
(siehe Bild)


Nur das Problem:
Augenscheinlich werden nicht alle Sixtupel und deren Triple aufgelistet.

Das letzte bearbeitete Sixtupel in der Liste ist (41,43,44,47,48,49), da fehlt offensichtlich so Manches (der Screenshot zeigt die letzten Einträge der Datenbanktabelle).
Man sieht es auch rein an der Anzahl der Einträge in der Datenbank:
Dort wurden 279.675.521 geladen, allerdings müssten es reinrechnerisch insgesamt 20*(49 über 6)=279676320 sein.

Es fehlen also um die 1000 Einträge!

Ich habe keine Ahnung warum die Einträge nicht drin sind!
Vom Java Progam her müssten alle Sachen bearbeiet werden,
Habe es mit diversen tests gesprüft:
Es werden alle möglichen Sixtuple erzeugt und auch deren 20 Tripel werden auch richtig erzeugt.
Es MÜSSTEN also alle Einträge in die Tabelle eingefügt worden sein!


Laut SQliteStudio, mit der ich mir den Datenbankinhal angucke, fhelen da aber wie gesagt rund 1000 Einträge.


Kann es sein dass rein die Anzahl an gepanten Tabellenzeilen zu groß ist (halt um die 280 Millionen zeilen mit je 2 Einträgen) und die trotz passender Befehle deshalb nicht alle erzeugt wurden oder so?
Oder woran könnte das liegen?
 

Anhänge

  • SQlite Datenbank.png
    SQlite Datenbank.png
    153,6 KB · Aufrufe: 5
Y

yfons123

Gast
warum machst du nicht eine TripleId Tabelle und erstellst alle Triple IDs
und erstellst eine Sixtupel tabelle

und dann joinst du anstatt alles in eine tabelle zu hauen..

außerdem ist die Methoden und variablen bennenung nicht hilfreich.. obfuscatoren kannst du dir runter laden und musst es nicht selber machen :D
da du ein rein mathematisches problem versuchst zu lösen bieten sich tests an die dir garantieren dass die einzelnen stückchen überhaupt funktionieren

ich rede bei "tests" nicht unbedingt von unit tests und frameworks und blabla... ein test ist irgendwas das dir überprüft was raus kommt, und dich warnt wenn nicht das raus kommt was du willst

Java:
    public int[] getNumberb() {
        int[] d = copyb();
        if (d == null) {
            return null;
        }
        if (endReachedb()) {
            b = null;
        } else {
            int c = b.length - 1;
            while (c >= 0 && b[c] == maxNum - (length - c - 1)) {
                c--;
            }

            b[c] = b[c] + 1;
            for (int i = c; i < b.length; i++) {
                b[i] = b[c] + (i - c);
            }

        }
        return d;
    }
beschreib mal in einem satz was das ding macht :D

du könntest zum beispiel hier ein stückchen raus schneiden
Java:
while (c >= 0 && b[c] == maxNum - (length - c - 1)) {
    c--;
}
und mit einem mini array erstmal testen ob das überhaupt das richtige ausrechnet, du testest ja das ding irgendwie während der entwicklung

und anstatt deinen "ausprobier lauf" zu löschen kopierst du ihn in deinen Test ordner und schon hast du Tests, wenn jedes "ausprobieren" richtig funktioniert nach einer änderung hast du schon getesteten code

außerdem tust du dir bei dem extrahieren von code viel leichter mit der variablen benennung... hier hast du bald dein limit von 26 zeichen erreicht.. mehr gibt das alphabet halt nicht her

wenn du deinen code in mini stückchen unterteil hast ( ja das heißt auch mehr als 2 klassen ) und garantieren kannst dass die stückchen funktionieren dann tust du und die leute hier im forum leichter dir zu helfen

das mathematische problem ist komplex genug, da muss der code nicht auch noch komplex sein


das ist jetzt nicht böse gemeint in irgend einer art, beim Coden willst du halt erreichen, dass du nach 2 Monaten auf den Code schaust und was ändern kannst ohne sofort zum weinen anzufangen
 
Y

yfons123

Gast
Ich habe bei meinem SQL Server eine Tabelle Range erstellt die 1 spalte hat die werte von 1-49 hat und daraus hab ich mir die Triples erzeugt mit dem Statement
Java:
INSERT INTO dbo.Triples SELECT A.Range,B.Range,C.Range FROM dbo.Range A,dbo.Range B,dbo.Range C
damit hab ich alle möglichen kombinationen.. keine ahnung was deine Triples sind aber die kannst du dir genauso erzeugen.. vllt brauchst du noch eine where klausel.. aber das ist doch viel einfacher als irgendwas in java zusammen zu bauen

wenn du nur einmal die reihenfolge haben willst kannst du ja ein select distinct machen anstatt alle
 
Zuletzt bearbeitet von einem Moderator:
Y

yfons123

Gast
So jetzt hab ich mal nach justiert bei dem...also

so wie ich das verstanden habe ist es folgender maßen :

du hast 1 2 3 als Tripple Tuple dh im Sixtupel ist jegliche Kombination die 1 2 3 irgendwo hat erlaubt
wie zb 123123,123321,321123

ich weis nicht ob tupels erlaubt sind wo kein mal eine zahl aus dem tripple vor kommt also
333333

da hab ich für trasnact sql diesen select gebaut
Java:
DECLARE @first int
DECLARE @second int
DECLARE @third int
SET @first = 1
SET @second = 2
SET @third = 3
SELECT *
  FROM [SqlDataTools].[dbo].[Triples] A,[SqlDataTools].[dbo].[Triples] B
  WHERE A.First IN (B.First,B.Second,B.Third)
  AND A.Second IN (B.First,B.Second,B.Third)
  AND A.Third IN (B.First,B.Second,B.Third)
  AND B.First IN (A.First,A.Second,A.Third)
  AND B.Second IN (A.First,A.Second,A.Third)
  AND B.Third IN (A.First,A.Second,A.Third)
  -- Hier gibst du an welche werte das sixtupel bilden sollen
  AND A.First IN ( @first,@second,@third )
  AND A.Second IN ( @first,@second,@third )
  AND A.Third IN ( @first,@second,@third )

ja ich weis A und B als Tabellen name ist scheiße aber da siehst du es mal :p
das liefert mir das als ergebnis
Code:
1    1    1    1    1    1
1    1    2    1    1    2
1    1    2    1    2    1
1    1    2    1    2    2
1    1    2    2    1    1
1    1    2    2    1    2
1    1    2    2    2    1
1    1    3    1    1    3
1    1    3    1    3    1
1    1    3    1    3    3
1    1    3    3    1    1
1    1    3    3    1    3
1    1    3    3    3    1
1    2    1    1    1    2
1    2    1    1    2    1
1    2    1    1    2    2
1    2    1    2    1    1
1    2    1    2    1    2
1    2    1    2    2    1
1    2    2    1    1    2
1    2    2    1    2    1
1    2    2    1    2    2
1    2    2    2    1    1
1    2    2    2    1    2
1    2    2    2    2    1
1    2    3    1    2    3
1    2    3    1    3    2
1    2    3    2    1    3
1    2    3    2    3    1
1    2    3    3    1    2
1    2    3    3    2    1
1    3    1    1    1    3
1    3    1    1    3    1
1    3    1    1    3    3
1    3    1    3    1    1
1    3    1    3    1    3
1    3    1    3    3    1
1    3    2    1    2    3
1    3    2    1    3    2
1    3    2    2    1    3
1    3    2    2    3    1
1    3    2    3    1    2
1    3    2    3    2    1
1    3    3    1    1    3
1    3    3    1    3    1
1    3    3    1    3    3
1    3    3    3    1    1
1    3    3    3    1    3
1    3    3    3    3    1
2    1    1    1    1    2
2    1    1    1    2    1
2    1    1    1    2    2
2    1    1    2    1    1
2    1    1    2    1    2
2    1    1    2    2    1
2    1    2    1    1    2
2    1    2    1    2    1
2    1    2    1    2    2
2    1    2    2    1    1
2    1    2    2    1    2
2    1    2    2    2    1
2    1    3    1    2    3
2    1    3    1    3    2
2    1    3    2    1    3
2    1    3    2    3    1
2    1    3    3    1    2
2    1    3    3    2    1
2    2    1    1    1    2
2    2    1    1    2    1
2    2    1    1    2    2
2    2    1    2    1    1
2    2    1    2    1    2
2    2    1    2    2    1
2    2    2    2    2    2
2    2    3    2    2    3
2    2    3    2    3    2
2    2    3    2    3    3
2    2    3    3    2    2
2    2    3    3    2    3
2    2    3    3    3    2
2    3    1    1    2    3
2    3    1    1    3    2
2    3    1    2    1    3
2    3    1    2    3    1
2    3    1    3    1    2
2    3    1    3    2    1
2    3    2    2    2    3
2    3    2    2    3    2
2    3    2    2    3    3
2    3    2    3    2    2
2    3    2    3    2    3
2    3    2    3    3    2
2    3    3    2    2    3
2    3    3    2    3    2
2    3    3    2    3    3
2    3    3    3    2    2
2    3    3    3    2    3
2    3    3    3    3    2
3    1    1    1    1    3
3    1    1    1    3    1
3    1    1    1    3    3
3    1    1    3    1    1
3    1    1    3    1    3
3    1    1    3    3    1
3    1    2    1    2    3
3    1    2    1    3    2
3    1    2    2    1    3
3    1    2    2    3    1
3    1    2    3    1    2
3    1    2    3    2    1
3    1    3    1    1    3
3    1    3    1    3    1
3    1    3    1    3    3
3    1    3    3    1    1
3    1    3    3    1    3
3    1    3    3    3    1
3    2    1    1    2    3
3    2    1    1    3    2
3    2    1    2    1    3
3    2    1    2    3    1
3    2    1    3    1    2
3    2    1    3    2    1
3    2    2    2    2    3
3    2    2    2    3    2
3    2    2    2    3    3
3    2    2    3    2    2
3    2    2    3    2    3
3    2    2    3    3    2
3    2    3    2    2    3
3    2    3    2    3    2
3    2    3    2    3    3
3    2    3    3    2    2
3    2    3    3    2    3
3    2    3    3    3    2
3    3    1    1    1    3
3    3    1    1    3    1
3    3    1    1    3    3
3    3    1    3    1    1
3    3    1    3    1    3
3    3    1    3    3    1
3    3    2    2    2    3
3    3    2    2    3    2
3    3    2    2    3    3
3    3    2    3    2    2
3    3    2    3    2    3
3    3    2    3    3    2
3    3    3    3    3    3
 
Y

yfons123

Gast
vllt kannst du damit mehr anfangen
Java:
DECLARE @first int
DECLARE @second int
DECLARE @third int
SET @first = 1
SET @second = 2
SET @third = 3
  SELECT * FROM dbo.Triples A,[SqlDataTools].[dbo].[Triples] B
   WHERE
   -- A muss irgendein Triple sein
      A.First IN ( @first,@second,@third )
  AND A.Second IN ( @first,@second,@third )
  AND A.Third IN ( @first,@second,@third )
  -- B muss irgend einen Wert von dem Tripel haben
  AND B.Second IN (@first,@second,@third)
  AND B.First IN (@first,@second,@third)
  AND B.Third IN (@first,@second,@third)
  -- Eine Zahl des Tripels muss mindestens 1 mal vorkommen
  AND @first IN ( A.First,A.Second,A.Third,B.First,B.Second,B.Third)
  AND @second IN ( A.First,A.Second,A.Third,B.First,B.Second,B.Third)
  AND @third IN ( A.First,A.Second,A.Third,B.First,B.Second,B.Third)
Code:
1    1    1    1    2    3
1    1    1    1    3    2
1    1    1    2    1    3
1    1    1    2    2    3
1    1    1    2    3    1
1    1    1    2    3    2
1    1    1    2    3    3
1    1    1    3    1    2
1    1    1    3    2    1
1    1    1    3    2    2
1    1    1    3    2    3
1    1    1    3    3    2
1    1    2    1    1    3
1    1    2    1    2    3
1    1    2    1    3    1
1    1    2    1    3    2
1    1    2    1    3    3
1    1    2    2    1    3
1    1    2    2    2    3
1    1    2    2    3    1
1    1    2    2    3    2
1    1    2    2    3    3
1    1    2    3    1    1
1    1    2    3    1    2
1    1    2    3    1    3
1    1    2    3    2    1
1    1    2    3    2    2
1    1    2    3    2    3
1    1    2    3    3    1
1    1    2    3    3    2
1    1    2    3    3    3
1    1    3    1    1    2
1    1    3    1    2    1
1    1    3    1    2    2
1    1    3    1    2    3
1    1    3    1    3    2
1    1    3    2    1    1
1    1    3    2    1    2
1    1    3    2    1    3
1    1    3    2    2    1
1    1    3    2    2    2
1    1    3    2    2    3
1    1    3    2    3    1
1    1    3    2    3    2
1    1    3    2    3    3
1    1    3    3    1    2
1    1    3    3    2    1
1    1    3    3    2    2
1    1    3    3    2    3
1    1    3    3    3    2
1    2    1    1    1    3
1    2    1    1    2    3
1    2    1    1    3    1
1    2    1    1    3    2
1    2    1    1    3    3
1    2    1    2    1    3
1    2    1    2    2    3
1    2    1    2    3    1
1    2    1    2    3    2
1    2    1    2    3    3
1    2    1    3    1    1
1    2    1    3    1    2
1    2    1    3    1    3
1    2    1    3    2    1
1    2    1    3    2    2
1    2    1    3    2    3
1    2    1    3    3    1
1    2    1    3    3    2
1    2    1    3    3    3
1    2    2    1    1    3
1    2    2    1    2    3
1    2    2    1    3    1
1    2    2    1    3    2
1    2    2    1    3    3
1    2    2    2    1    3
1    2    2    2    2    3
1    2    2    2    3    1
1    2    2    2    3    2
1    2    2    2    3    3
1    2    2    3    1    1
1    2    2    3    1    2
1    2    2    3    1    3
1    2    2    3    2    1
1    2    2    3    2    2
1    2    2    3    2    3
1    2    2    3    3    1
1    2    2    3    3    2
1    2    2    3    3    3
1    2    3    1    1    1
1    2    3    1    1    2
1    2    3    1    1    3
1    2    3    1    2    1
1    2    3    1    2    2
1    2    3    1    2    3
1    2    3    1    3    1
1    2    3    1    3    2
1    2    3    1    3    3
1    2    3    2    1    1
1    2    3    2    1    2
1    2    3    2    1    3
1    2    3    2    2    1
1    2    3    2    2    2
1    2    3    2    2    3
1    2    3    2    3    1
1    2    3    2    3    2
1    2    3    2    3    3
1    2    3    3    1    1
1    2    3    3    1    2
1    2    3    3    1    3
1    2    3    3    2    1
1    2    3    3    2    2
1    2    3    3    2    3
1    2    3    3    3    1
1    2    3    3    3    2
1    2    3    3    3    3
1    3    1    1    1    2
1    3    1    1    2    1
1    3    1    1    2    2
1    3    1    1    2    3
1    3    1    1    3    2
1    3    1    2    1    1
1    3    1    2    1    2
1    3    1    2    1    3
1    3    1    2    2    1
1    3    1    2    2    2
1    3    1    2    2    3
1    3    1    2    3    1
1    3    1    2    3    2
1    3    1    2    3    3
1    3    1    3    1    2
1    3    1    3    2    1
1    3    1    3    2    2
1    3    1    3    2    3
1    3    1    3    3    2
1    3    2    1    1    1
1    3    2    1    1    2
1    3    2    1    1    3
1    3    2    1    2    1
1    3    2    1    2    2
1    3    2    1    2    3
1    3    2    1    3    1
1    3    2    1    3    2
1    3    2    1    3    3
1    3    2    2    1    1
1    3    2    2    1    2
1    3    2    2    1    3
1    3    2    2    2    1
1    3    2    2    2    2
1    3    2    2    2    3
1    3    2    2    3    1
1    3    2    2    3    2
1    3    2    2    3    3
1    3    2    3    1    1
1    3    2    3    1    2
1    3    2    3    1    3
1    3    2    3    2    1
1    3    2    3    2    2
1    3    2    3    2    3
1    3    2    3    3    1
1    3    2    3    3    2
1    3    2    3    3    3
1    3    3    1    1    2
1    3    3    1    2    1
1    3    3    1    2    2
1    3    3    1    2    3
1    3    3    1    3    2
1    3    3    2    1    1
1    3    3    2    1    2
1    3    3    2    1    3
1    3    3    2    2    1
1    3    3    2    2    2
1    3    3    2    2    3
1    3    3    2    3    1
1    3    3    2    3    2
1    3    3    2    3    3
1    3    3    3    1    2
1    3    3    3    2    1
1    3    3    3    2    2
1    3    3    3    2    3
1    3    3    3    3    2
2    1    1    1    1    3
2    1    1    1    2    3
2    1    1    1    3    1
2    1    1    1    3    2
2    1    1    1    3    3
2    1    1    2    1    3
2    1    1    2    2    3
2    1    1    2    3    1
2    1    1    2    3    2
2    1    1    2    3    3
2    1    1    3    1    1
2    1    1    3    1    2
2    1    1    3    1    3
2    1    1    3    2    1
2    1    1    3    2    2
2    1    1    3    2    3
2    1    1    3    3    1
2    1    1    3    3    2
2    1    1    3    3    3
2    1    2    1    1    3
2    1    2    1    2    3
2    1    2    1    3    1
2    1    2    1    3    2
2    1    2    1    3    3
2    1    2    2    1    3
2    1    2    2    2    3
2    1    2    2    3    1
2    1    2    2    3    2
2    1    2    2    3    3
2    1    2    3    1    1
2    1    2    3    1    2
2    1    2    3    1    3
2    1    2    3    2    1
2    1    2    3    2    2
2    1    2    3    2    3
2    1    2    3    3    1
2    1    2    3    3    2
2    1    2    3    3    3
2    1    3    1    1    1
2    1    3    1    1    2
2    1    3    1    1    3
2    1    3    1    2    1
2    1    3    1    2    2
2    1    3    1    2    3
2    1    3    1    3    1
2    1    3    1    3    2
2    1    3    1    3    3
2    1    3    2    1    1
2    1    3    2    1    2
2    1    3    2    1    3
2    1    3    2    2    1
2    1    3    2    2    2
2    1    3    2    2    3
2    1    3    2    3    1
2    1    3    2    3    2
2    1    3    2    3    3
2    1    3    3    1    1
2    1    3    3    1    2
2    1    3    3    1    3
2    1    3    3    2    1
2    1    3    3    2    2
2    1    3    3    2    3
2    1    3    3    3    1
2    1    3    3    3    2
2    1    3    3    3    3
2    2    1    1    1    3
2    2    1    1    2    3
2    2    1    1    3    1
2    2    1    1    3    2
2    2    1    1    3    3
2    2    1    2    1    3
2    2    1    2    2    3
2    2    1    2    3    1
2    2    1    2    3    2
2    2    1    2    3    3
2    2    1    3    1    1
2    2    1    3    1    2
2    2    1    3    1    3
2    2    1    3    2    1
2    2    1    3    2    2
2    2    1    3    2    3
2    2    1    3    3    1
2    2    1    3    3    2
2    2    1    3    3    3
2    2    2    1    1    3
2    2    2    1    2    3
2    2    2    1    3    1
2    2    2    1    3    2
2    2    2    1    3    3
2    2    2    2    1    3
2    2    2    2    3    1
2    2    2    3    1    1
2    2    2    3    1    2
2    2    2    3    1    3
2    2    2    3    2    1
2    2    2    3    3    1
2    2    3    1    1    1
2    2    3    1    1    2
2    2    3    1    1    3
2    2    3    1    2    1
2    2    3    1    2    2
2    2    3    1    2    3
2    2    3    1    3    1
2    2    3    1    3    2
2    2    3    1    3    3
2    2    3    2    1    1
2    2    3    2    1    2
2    2    3    2    1    3
2    2    3    2    2    1
2    2    3    2    3    1
2    2    3    3    1    1
2    2    3    3    1    2
2    2    3    3    1    3
2    2    3    3    2    1
2    2    3    3    3    1
2    3    1    1    1    1
2    3    1    1    1    2
2    3    1    1    1    3
2    3    1    1    2    1
2    3    1    1    2    2
2    3    1    1    2    3
2    3    1    1    3    1
2    3    1    1    3    2
2    3    1    1    3    3
2    3    1    2    1    1
2    3    1    2    1    2
2    3    1    2    1    3
2    3    1    2    2    1
2    3    1    2    2    2
2    3    1    2    2    3
2    3    1    2    3    1
2    3    1    2    3    2
2    3    1    2    3    3
2    3    1    3    1    1
2    3    1    3    1    2
2    3    1    3    1    3
2    3    1    3    2    1
2    3    1    3    2    2
2    3    1    3    2    3
2    3    1    3    3    1
2    3    1    3    3    2
2    3    1    3    3    3
2    3    2    1    1    1
2    3    2    1    1    2
2    3    2    1    1    3
2    3    2    1    2    1
2    3    2    1    2    2
2    3    2    1    2    3
2    3    2    1    3    1
2    3    2    1    3    2
2    3    2    1    3    3
2    3    2    2    1    1
2    3    2    2    1    2
2    3    2    2    1    3
2    3    2    2    2    1
2    3    2    2    3    1
2    3    2    3    1    1
2    3    2    3    1    2
2    3    2    3    1    3
2    3    2    3    2    1
2    3    2    3    3    1
2    3    3    1    1    1
2    3    3    1    1    2
2    3    3    1    1    3
2    3    3    1    2    1
2    3    3    1    2    2
2    3    3    1    2    3
2    3    3    1    3    1
2    3    3    1    3    2
2    3    3    1    3    3
2    3    3    2    1    1
2    3    3    2    1    2
2    3    3    2    1    3
2    3    3    2    2    1
2    3    3    2    3    1
2    3    3    3    1    1
2    3    3    3    1    2
2    3    3    3    1    3
2    3    3    3    2    1
2    3    3    3    3    1
3    1    1    1    1    2
3    1    1    1    2    1
3    1    1    1    2    2
3    1    1    1    2    3
3    1    1    1    3    2
3    1    1    2    1    1
3    1    1    2    1    2
3    1    1    2    1    3
3    1    1    2    2    1
3    1    1    2    2    2
3    1    1    2    2    3
3    1    1    2    3    1
3    1    1    2    3    2
3    1    1    2    3    3
3    1    1    3    1    2
3    1    1    3    2    1
3    1    1    3    2    2
3    1    1    3    2    3
3    1    1    3    3    2
3    1    2    1    1    1
3    1    2    1    1    2
3    1    2    1    1    3
3    1    2    1    2    1
3    1    2    1    2    2
3    1    2    1    2    3
3    1    2    1    3    1
3    1    2    1    3    2
3    1    2    1    3    3
3    1    2    2    1    1
3    1    2    2    1    2
3    1    2    2    1    3
3    1    2    2    2    1
3    1    2    2    2    2
3    1    2    2    2    3
3    1    2    2    3    1
3    1    2    2    3    2
3    1    2    2    3    3
3    1    2    3    1    1
3    1    2    3    1    2
3    1    2    3    1    3
3    1    2    3    2    1
3    1    2    3    2    2
3    1    2    3    2    3
3    1    2    3    3    1
3    1    2    3    3    2
3    1    2    3    3    3
3    1    3    1    1    2
3    1    3    1    2    1
3    1    3    1    2    2
3    1    3    1    2    3
3    1    3    1    3    2
3    1    3    2    1    1
3    1    3    2    1    2
3    1    3    2    1    3
3    1    3    2    2    1
3    1    3    2    2    2
3    1    3    2    2    3
3    1    3    2    3    1
3    1    3    2    3    2
3    1    3    2    3    3
3    1    3    3    1    2
3    1    3    3    2    1
3    1    3    3    2    2
3    1    3    3    2    3
3    1    3    3    3    2
3    2    1    1    1    1
3    2    1    1    1    2
3    2    1    1    1    3
3    2    1    1    2    1
3    2    1    1    2    2
3    2    1    1    2    3
3    2    1    1    3    1
3    2    1    1    3    2
3    2    1    1    3    3
3    2    1    2    1    1
3    2    1    2    1    2
3    2    1    2    1    3
3    2    1    2    2    1
3    2    1    2    2    2
3    2    1    2    2    3
3    2    1    2    3    1
3    2    1    2    3    2
3    2    1    2    3    3
3    2    1    3    1    1
3    2    1    3    1    2
3    2    1    3    1    3
3    2    1    3    2    1
3    2    1    3    2    2
3    2    1    3    2    3
3    2    1    3    3    1
3    2    1    3    3    2
3    2    1    3    3    3
3    2    2    1    1    1
3    2    2    1    1    2
3    2    2    1    1    3
3    2    2    1    2    1
3    2    2    1    2    2
3    2    2    1    2    3
3    2    2    1    3    1
3    2    2    1    3    2
3    2    2    1    3    3
3    2    2    2    1    1
3    2    2    2    1    2
3    2    2    2    1    3
3    2    2    2    2    1
3    2    2    2    3    1
3    2    2    3    1    1
3    2    2    3    1    2
3    2    2    3    1    3
3    2    2    3    2    1
3    2    2    3    3    1
3    2    3    1    1    1
3    2    3    1    1    2
3    2    3    1    1    3
3    2    3    1    2    1
3    2    3    1    2    2
3    2    3    1    2    3
3    2    3    1    3    1
3    2    3    1    3    2
3    2    3    1    3    3
3    2    3    2    1    1
3    2    3    2    1    2
3    2    3    2    1    3
3    2    3    2    2    1
3    2    3    2    3    1
3    2    3    3    1    1
3    2    3    3    1    2
3    2    3    3    1    3
3    2    3    3    2    1
3    2    3    3    3    1
3    3    1    1    1    2
3    3    1    1    2    1
3    3    1    1    2    2
3    3    1    1    2    3
3    3    1    1    3    2
3    3    1    2    1    1
3    3    1    2    1    2
3    3    1    2    1    3
3    3    1    2    2    1
3    3    1    2    2    2
3    3    1    2    2    3
3    3    1    2    3    1
3    3    1    2    3    2
3    3    1    2    3    3
3    3    1    3    1    2
3    3    1    3    2    1
3    3    1    3    2    2
3    3    1    3    2    3
3    3    1    3    3    2
3    3    2    1    1    1
3    3    2    1    1    2
3    3    2    1    1    3
3    3    2    1    2    1
3    3    2    1    2    2
3    3    2    1    2    3
3    3    2    1    3    1
3    3    2    1    3    2
3    3    2    1    3    3
3    3    2    2    1    1
3    3    2    2    1    2
3    3    2    2    1    3
3    3    2    2    2    1
3    3    2    2    3    1
3    3    2    3    1    1
3    3    2    3    1    2
3    3    2    3    1    3
3    3    2    3    2    1
3    3    2    3    3    1
3    3    3    1    1    2
3    3    3    1    2    1
3    3    3    1    2    2
3    3    3    1    2    3
3    3    3    1    3    2
3    3    3    2    1    1
3    3    3    2    1    2
3    3    3    2    1    3
3    3    3    2    2    1
3    3    3    2    3    1
3    3    3    3    1    2
3    3    3    3    2    1
 

berndoa

Top Contributor
Also:
Zu der NumberGenerator Klasse:
Per Konstruktorparameter wird vorgegeben welche Zahlentupel damit erzeugt werden können:

Java:
    public NumberGenerator(int length, int minNum, int maxNum)
Das gibt vor dass wir alle (aufsteigend sortierten, pro Tupel keien Zahl doppelt) Tupel der Länge length erzeugen wollen, wobei die einzelne "Ziffer" zwischen minNum und maxNum liegt.

Java:
new NumberGenerator(6,1,49)
bringt uns also einen NumberGenerator, der alle Tupel (1,2,3,4,5) bis (44,45,46,47,48,49) .
So wie man sie halt hochzählen würde der Reihe nach.

Beim Aufrufend es Konstruktors wird die Dummyvariable int[] b gleich auf das"kleinste" mögliche Tupel (hier (12,3,4,5,6) ) gesetzt.

Die Methode
Java:
public int[] getNumberb() {
tut 2-3 Sachen gleichzeitig:
Erst wird mal eine (deep)copy des aktuellen Tupels gespeichert, für den Rückgabewert später.
Dann wird das Tupel "um eins hochgezählt", wir gehen also eine Zahl weiter
(Also im Tupel von hinten nach vorne die 1. zahl gesucht, die kleiner als der Maximalwert ist, +1 gemacht, alle zahlen rechts davon auf die kleinstmöglichen Werte gesetzt.)
dann wird die gerade (per deepcopy) gemerkte Zahl return.

Also kurzum
1. alte Zahl returnen
2. im Numbergenerator gerade betrachtete Zahl um eins erhöhen.

zum vermeiden von "unreachable code" und so halt ne copy benutzt.


Ansosnten habe ich es so gedacht dass, falls ds Tupel bereits die größtmögliche Zahl darstellt und ich trotzdem getNumberb aufrufe, dass diese letzte, größte Zahl returned wird und intern das Tupel auf null gesetzt wird.

wird also nach ausgabe der letzten zahl weiter eine neue zahl angefordert, kommt nur noch null zurück.

Vermutlich ist insofern das mit der
Java:
    public boolean endReachedb()
Methode unnötig im Prinzip, ich könnte auch so lange zahlen abrufen bis nur noch Null zurückgegeben wird.


Ansosnten zu den Tupeln:
Für jede 6-stellige Tupel wie (1,2,3,4,5,6) will ich in der Tabelle 20 Zeilen haben, wo vorne eben jenes 6-Tupel steht und dahinter jeweils eins der 20 (=(6 über 3)) enthaltenen 3Tupel.

Will mir also systematisch alle Verbindungen zwischen 6-Tupeln und 3-Tupeln aufschreiben, daher gibt es auch pro 6Tupel 20 Zeilen, jede Zeile das 6Tupel und ein Anderes der erhaltenen Tupel
 
Y

yfons123

Gast
Ah jetzt versteh ich es langsam, endlich weis ich was du mit den 20 meinst

also ich hab die tabelle dbo.Range die einfach nur 1 spalte mit werten von 1-49 hat zum generieren der triples

dann hab ich die triples und sixtel tabelle angelegt und alles mit indexe voll geballert, also jede spalte und 1 mal auf alle spalten

die triples generiere ich so
Java:
TRUNCATE TABLE dbo.Triples
INSERT INTO dbo.Triples SELECT * FROM dbo.Range A,dbo.Range B,dbo.Range C
WHERE
    A.Range != B.Range
    AND A.Range != C.Range
    AND B.Range != C.Range
    AND A.Range < B.Range
    AND B.Range < C.Range
sind 16215 einträge

so dann habe ich mal selektiert nach ein six tuple
meins ist hier 1 2 3 4 5 6
Code:
DECLARE @one int,@two int,@three int,@four int,@five int,@six int;
SET @one = 1
SET @two = 2
SET @three =3
SET @four =4
SET @five =5
SET @six =6
SELECT *
FROM [SqlDataTools].[dbo].[Triples] A
WHERE
    AND A.First IN (@one ,@two,@three,@four,@five,@six)
    AND A.Second IN (@one ,@two,@three,@four,@five,@six)
    AND A.Third IN (@one ,@two,@three,@four,@five,@six)

wenn ich das durchlaufen lasse komme ich auch auf die 20 werte
Code:
1    2    3
1    2    4
1    2    5
1    2    6
1    3    4
1    3    5
1    3    6
1    4    5
1    4    6
1    5    6
2    3    4
2    3    5
2    3    6
2    4    5
2    4    6
2    5    6
3    4    5
3    4    6
3    5    6
4    5    6

Jetzt generiere ich mir die Sixtels zusammen das sind dann 10737573
Code:
TRUNCATE TABLE dbo.Sixtels
INSERT INTO dbo.Sixtels SELECT * FROM dbo.Range A,dbo.Range B,dbo.Range C,dbo.Range D,dbo.Range E,dbo.Range F
WHERE
    A.Range != B.Range
    AND A.Range != C.Range
    AND A.Range != D.Range
    AND A.Range != E.Range
    AND A.Range != F.Range

    AND B.Range != C.Range
    AND B.Range != D.Range
    AND B.Range != E.Range
    AND B.Range != F.Range

    AND C.Range != D.Range
    AND C.Range != E.Range
    AND C.Range != F.Range

    AND D.Range != E.Range
    AND D.Range != F.Range

    AND E.Range != F.Range

    AND A.Range < B.Range
    AND B.Range < C.Range
    AND C.Range < D.Range
    AND D.Range < E.Range
    AND E.Range < F.Range
das sind die ersten 100 einträge
Code:
1    2    3    4    5    6
1    2    3    4    5    7
1    2    3    4    5    8
1    2    3    4    5    9
1    2    3    4    5    10
1    2    3    4    5    11
1    2    3    4    5    12
1    2    3    4    5    13
1    2    3    4    5    14
1    2    3    4    5    16
1    2    3    4    5    17
1    2    3    4    5    18
1    2    3    4    5    19
1    2    3    4    5    20
1    2    3    4    5    21
1    2    3    4    5    22
1    2    3    4    5    23
1    2    3    4    5    24
1    2    3    4    5    25
1    2    3    4    5    26
1    2    3    4    5    27
1    2    3    4    5    29
1    2    3    4    5    30
1    2    3    4    5    31
1    2    3    4    5    32
1    2    3    4    5    33
1    2    3    4    5    34
1    2    3    4    5    35
1    2    3    4    5    36
1    2    3    4    5    37
1    2    3    4    5    38
1    2    3    4    5    39
1    2    3    4    5    40
1    2    3    4    5    41
1    2    3    4    5    42
1    2    3    4    5    43
1    2    3    4    5    44
1    2    3    4    5    45
1    2    3    4    5    46
1    2    3    4    5    47
1    2    3    4    5    48
1    2    3    4    5    49
1    2    3    4    6    7
1    2    3    4    6    8
1    2    3    4    6    9
1    2    3    4    6    10
1    2    3    4    6    11
1    2    3    4    6    12
1    2    3    4    6    13
1    2    3    4    6    14
1    2    3    4    6    16
1    2    3    4    6    17
1    2    3    4    6    18
1    2    3    4    6    19
1    2    3    4    6    20
1    2    3    4    6    21
1    2    3    4    6    22
1    2    3    4    6    23
1    2    3    4    6    24
1    2    3    4    6    25
1    2    3    4    6    26
1    2    3    4    6    27
1    2    3    4    6    29
1    2    3    4    6    30
1    2    3    4    6    31
1    2    3    4    6    32
1    2    3    4    6    33
1    2    3    4    6    34
1    2    3    4    6    35
1    2    3    4    6    36
1    2    3    4    6    37
1    2    3    4    6    38
1    2    3    4    6    39
1    2    3    4    6    40
1    2    3    4    6    41
1    2    3    4    6    42
1    2    3    4    6    43
1    2    3    4    6    44
1    2    3    4    6    45
1    2    3    4    6    46
1    2    3    4    6    47
1    2    3    4    6    48
1    2    3    4    6    49
1    2    3    5    6    7
1    2    3    5    6    8
1    2    3    5    6    9
1    2    3    5    6    10
1    2    3    5    6    11
1    2    3    5    6    12
1    2    3    5    6    13
1    2    3    5    6    14
1    2    3    5    6    16
1    2    3    5    6    17
1    2    3    5    6    18
1    2    3    5    6    19
1    2    3    5    6    20
1    2    3    5    6    21
1    2    3    5    6    22
1    2    3    5    6    23
1    2    3    5    6    24

Jetzt könnte ich die Tabellen Joinen um die 20er Päckchen mit dem vorherigen select zu verbinden ohne variablen
Code:
SELECT COUNT(*)
FROM [SqlDataTools].[dbo].[Triples] triple, dbo.Sixtels Sixtel
WHERE
    triple.First IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
    AND triple.Second IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
    AND triple.Third IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
ich mache kein select * weil mir dann alles verreckt... mein armer 1 CPU server.. der wird sich an das trauma noch die nächsten monate erinnern...

das ergebnis ist dann ... naja 1 kern läuft seit 16 min... dauert noch ...
 
Y

yfons123

Gast
Was ich nicht verstehe ist warum du krampfhaft versuchst alle ergebnisse zu speichern


du speicherst doch auch nicht die zahlen von 1 -2hoch31 damit du alle intwerte hast...
 
Y

yfons123

Gast
aber wie willst du deine Tabelle denn dann noch durchlatschen? du hast wahrscheinlich einen Text als datentyp genommen

ich bin weiterhin überzeugt dass man das tabellen modell nochmal überlegen sollte...

es gibt gründe warums normal formen gibt in sql, ein select eines sixtupels mit seinen 20 matches ist nach dem ausführungsplan vom studio bei 0.009 sec und ich habe dem server nicht viel gegeben an power

die selects und inserts hast du ansich jetzt ja, diese sind in transact sql also musst du die wahrscheinlich noch umbauen bzw in java einmauern oder ähnliches...ich konnte die tabelle in weniger zeilen code erzeugen und selektieren ohne fancy mathematik ... ganz simpel eigentlich und kein mathe abenteuer

lass die datenbank das tun was sie kann und das sind nun mal insert, delete, select, update



und die datenbank macht keine mathe fehler :p
 
Y

yfons123

Gast
Java:
SELECT CONVERT(NVARCHAR,Sixtel.First)+CONVERT(NVARCHAR,Sixtel.Second)+CONVERT(NVARCHAR,Sixtel.Third)+CONVERT(NVARCHAR,Sixtel.Fourth)+CONVERT(NVARCHAR,Sixtel.Fith)+CONVERT(NVARCHAR, Sixtel.Sixth),CONVERT(NVARCHAR,triple.First)+CONVERT(NVARCHAR,triple.Second)+CONVERT(NVARCHAR,triple.Third)
FROM [SqlDataTools].[dbo].[Triples] triple, (SELECT TOP(2) * FROM  dbo.Sixtels) AS Sixtel
WHERE
    triple.First IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
    AND triple.Second IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
    AND triple.Third IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
das hier selected mir die ersten zwei sixtupel und die 20er päckchen dazu ,

das wirst du dann wahrscheinlich in eine view packen
das ergebnis ist das da
Code:
(No column name)    (No column name)
123456    123
123456    124
123456    125
123456    126
123456    134
123456    135
123456    136
123456    145
123456    146
123456    156
123456    234
123456    235
123456    236
123456    245
123456    246
123456    256
123456    345
123456    346
123456    356
123456    456
123457    123
123457    124
123457    125
123457    127
123457    134
123457    135
123457    137
123457    145
123457    147
123457    157
123457    234
123457    235
123457    237
123457    245
123457    247
123457    257
123457    345
123457    347
123457    357
123457    457
 
Y

yfons123

Gast
wie willst du denn dann die triples raus filtern die du nicht brauchst ? mit java string split ?

279676320 * 3 wegen triple string split * 6 wegen sixtupel string split * X vergleiche und suchen

du wirst da nicht fertig
 

berndoa

Top Contributor
Java:
TRUNCATE TABLE dbo.Triples
INSERT INTO dbo.Triples SELECT * FROM dbo.Range A,dbo.Range B,dbo.Range C
WHERE
    A.Range != B.Range
    AND A.Range != C.Range
    AND B.Range != C.Range
    AND A.Range < B.Range
    AND B.Range < C.Range

Code:
DECLARE @one int,@two int,@three int,@four int,@five int,@six int;
SET @one = 1
SET @two = 2
SET @three =3
SET @four =4
SET @five =5
SET @six =6
SELECT *
FROM [SqlDataTools].[dbo].[Triples] A
WHERE
    AND A.First IN (@one ,@two,@three,@four,@five,@six)
    AND A.Second IN (@one ,@two,@three,@four,@five,@six)
    AND A.Third IN (@one ,@two,@three,@four,@five,@six)


Code:
TRUNCATE TABLE dbo.Sixtels
INSERT INTO dbo.Sixtels SELECT * FROM dbo.Range A,dbo.Range B,dbo.Range C,dbo.Range D,dbo.Range E,dbo.Range F
WHERE
    A.Range != B.Range
    AND A.Range != C.Range
    AND A.Range != D.Range
    AND A.Range != E.Range
    AND A.Range != F.Range

    AND B.Range != C.Range
    AND B.Range != D.Range
    AND B.Range != E.Range
    AND B.Range != F.Range

    AND C.Range != D.Range
    AND C.Range != E.Range
    AND C.Range != F.Range

    AND D.Range != E.Range
    AND D.Range != F.Range

    AND E.Range != F.Range

    AND A.Range < B.Range
    AND B.Range < C.Range
    AND C.Range < D.Range
    AND D.Range < E.Range
    AND E.Range < F.Range
Ich muss jetzt einfach mal fragen:
Kannst du mir vielleicht kurz die SQL Codes hier erklären?

Was das Endergebnis ist, kann ich mir denken bzw. schreibst du ja dazu.
Aber rein die SQL Syntax, was die Sachen da bedeuten?
Also was bspw. der Ausdruck
SQL:
FROM dbo.Range A,dbo.Range B,dbo.Range C
bedeuten was ich mir utner diesen A,B,C vorstellen kann (Datenbank, Tabelle, Zelle?)
Das mit dem Declare und Set definiert Variabeln bzw. Kosntanten, hat mir google schon erklärt.

Was sind diese Sachen A.Range und so?
Was ist das A.First (.Second, .Third,etc.) in
Code:
A.First IN (@one ,@two,@three,@four,@five,@six)
was tut der Ausdruck?

Was bewirkt die Kombination aus Truncate, insert und Select im letzten Tel?
Bin nicht wirklich bzw gar nicht gut drin Befehle zu kombinieren.
 

berndoa

Top Contributor
wie willst du denn dann die triples raus filtern die du nicht brauchst ? mit java string split ?

279676320 * 3 wegen triple string split * 6 wegen sixtupel string split * X vergleiche und suchen

du wirst da nicht fertig
Im Konzept:
Wenn ich so die Tabelle wie du im letzten Codeblock (nur mit allen rund 280 M;illionen Zeilen) habe, erst gucken ob bspw. das Tripel (2,34,47) überflüssig ist, hierzu den SQL Äquivalent von "Zähle alle Zeilen in der Tabelle, bei denen rechts nicht (2,34,47) steht (wobei für jedes Sixtel maximal nur eine solche Zeile gezählt wird) und prüfe ob die Anzahl dieser Zeilen gleich (49 über 6) = rund 13 Millionen ist".
Falls die Anzahl gleich 49 über 6 ist, heißt das dass das Tripel überflüssig ist.

Im 2. Schritt werden dann alle Zeilen entfernt, in denen rechts das Tripel vorkommt.

Mache diese 1-2 Schritte für alle Tripel, wobei die "Löschungsreihenfolge" vielleicht wichtig sein könnte dafür wie lang die letztlich übrig bleibende Liste ist.
Interessant ist am Ende nur wie viele verschiedene Tripel am Ende in der Liste übrigbleiben.
 
Y

yfons123

Gast
ich denke dir fehlt da noch ein bisschen datenbank wissen


zb kannst du eine View erstellen damit die datenbank so tut "als ob die tabelle" da wäre
in wirklichkeit stecken aber echte tabellen dahinter.

wenn du deine Tabelle nutzen willst dann wird dir der speicher verrecken und zusätzlich noch das problem dass du nichts indizieren kannst

ich habe zb die letzte tabelle als view eingerichtet mit den kombinierten werten , und jetzt will ich ei nanderes sixtupel suchen dann kann die db die indizes der "versteckten tabellen" hernehmen und damit holst du dir performance raus bei suchen

ohne index kannst du wochen lang warten bis das fertig ist
mit index joint die view sich das zusammen im nano sekunden bereich

halte NICHT alles im speicher.. weg von dem gedanken
 
Y

yfons123

Gast
Java:
FROM dbo.Range A,dbo.Range B,dbo.Range C
das ist glaub ich eher bekannt als "oracle join" ansich ist es nur eine kürzere schreibweise für inner joins
die inner join klausel ist in allen sql systemen verfügbar

das so zuschreibne ist in oracle und sql server verfügbar und ich glaube auch in sqlite aber bin mir nicht sicher, inner join muss es aber auf jeden fall haben die "buchstaben" danach wie A B C sind aliase dh wenn ich schreibe
dann macht es mir hier einen alias draus und ansich steht dann da
"im Schema dbo, nimm die Tabelle Range, und von der tabelle die spalte Range"
nur wenn ich 2 mal einen gleichen spalten namen lade kann ich es ja nimmer auseinander halten deswegen muss ich diese aliase benutzen

Code:
AND A.First IN (@one ,@two,@three,@four,@five,@six)
diese variablen waren nur als test gedacht damit ich beweisen kann dass mein code richtig ist. Das funktioniert so auch nur in transact sql.

was eher interessant ist ist folgendes
Code:
triple.First IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
das sagt aus "wenn der wert von der tabelle triple der spalte First in der werte sammlung Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth irgendwo vorkommt dann liefere true zurück ansonstent halt nicht"



Code:
TRUNCATE TABLE dbo.Triples
INSERT INTO dbo.Triples SELECT * FROM dbo.Range A,dbo.Range B,dbo.Range C
WHERE
    A.Range != B.Range
    AND A.Range != C.Range
    AND B.Range != C.Range
    AND A.Range < B.Range
    AND B.Range < C.Range
der teil macht "leere die tabelle dbo.Triples"
"Füge in die tabelle triples das ergebnis von dem select ein"

das sollte dein sqlite browser ansich so können, bin mir aber unsicher


hier ist es vllt einleuchtender mit meiner tabellen struktur
1670241373998.png

ich habe mir alle werte aus dbo.Range erzeugt, in dbo.Range gibts nur die zahlen von 1 bis 49

was wichtig ist, ich habe da transact sql geschrieben, du hast aber sqlite sql dh du hast das überhaupt nicht oder musst es noch hinzufügen


in transact sind das variablen mit dem @ zeichen
Java:
DECLARE @one int,@two int,@three int,@four int,@five int,@six int;
SET @one = 1
SET @two = 2
SET @three =3
SET @four =4
SET @five =5
SET @six =6
habe mir hier einfach mal ein sextupel zusammen geschustert um zu beweisen dass ich auch auf die 20 komme


kann es sein dass du noch mit cobol gelernt hast oder etwas älter bist? der ansatz dass man "einen datensatz lest und den auswertet und dann weiter latscht" ist eig von der zeit vor datenbanken ( diese denkweise zwingt die meisten datenbanken in die knie )
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
das ist glaub ich eher bekannt als "oracle join" ansich ist es nur eine kürzere schreibweise für inner joins
die inner join klausel ist in allen sql systemen verfügbar
Das ist zunächst mal ein Cross Join -> das Übel aller Joins :) Erst durch die WHERE-Klausel wird das zu einem INNER JOIN und die Frage ist, ob der Anfrageoptimierer das auch wirklich immer erkennt, abgesehen davon, dass die INNER JOIN-Klausel wesentlich ausdrucksstärker ist. Und ja: früher musste man in Oracle JOINs in dieser Weise schreiben, ganz lustig auch die OUTER JOINs, z. B. ein LEFT JOIN WHERE leftTable.col= rightTable.col(+), wenn ich mich recht entsinne.

kann es sein dass du noch mit cobol gelernt hast oder etwas älter bist? der ansatz dass man "einen datensatz lest und den auswertet und dann weiter latscht" ist eig von der zeit vor datenbanken ( diese denkweise zwingt die meisten datenbanken in die knie )
Ich vermute eher, dass hier die imperative Denkweise dahintersteckt. An den deklarativen Stil von SQL muss man sich genauso gewöhnen wie an OO, wenn man von der prozeduralen Seite kommt.
 
Y

yfons123

Gast
ob der Anfrageoptimierer das auch wirklich immer erkennt
bei oracle ist das ein alias der umgewandelt wird in den oracle join
genauso wie COUNT(1) in oraclae ein alias für COUNT(*) ist

FULL OUTER JOIN hat aber keinen alias.. also auf beiden seiten darfst kein plus hinmachen :p


EDIT:
ich habe jetzt mal versucht nur mit transact ganz einfach eine SQL DB aufzubauen die er dann irgendwie übernehmen kann weil es mir so scheinte dass SQL wissenslücken da waren... dass es gar nicht bewusst war was man mit insert und select machen kann also "nur" mit einer abfragesprache
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
bei oracle ist das ein alias der umgewandelt wird in den oracle join
Ich meinte nicht den Optimierer von Oracle; der sollte das wohl können, nachdem es sonst keine Möglichkeit gab :) Bei anderen DBMS wäre ich mir da allerdings nicht so sicher. Besonders bei MySQL bin ich da sehr vorsichtig, das Ding ist zum Teil unterirdisch.
 
Y

yfons123

Gast
ich muss nur "im notfall" einspringen in oracle, damit hab ich es teilweise vom hals

das gute ist dass alles verskriptet wurde von anderen damit ich nur noch enter drücken muss und nicht die sogenannten "tools" anschauen muss
 
Y

yfons123

Gast
Ja, die Migrationen, die Leute machen sind anscheinend üblicherweise:
1. Oracle
2. MySQL/MariaDB
3. PostgreSQL (und da bleiben) :)
steht halt keine riesen firma dahinter und support den man nie braucht kann man nich tkaufen.. also ist es für ämter eh schon unten durch

sql server ist halt dödel einfach aufzubauen, wenn man die windows schiene hat
 

mihe7

Top Contributor
support den man nie braucht
Sag das nicht! Dank des Oracle Supports hatte ich seinerzeit erfahren, dass zwei Tage Arbeit fürn A... waren, weil der Menüpunkt in dem Oracle-Tool noch ein Relikt aus der (natürlich inkompatiblen) Vorgängerversion war, den man halt dringelassen hat. Da fällt einem nix mehr ein.

3. PostgreSQL (und da bleiben) :)
Du wirst lachen: als wir Ende der Nuller umgestiegen sind, wollte ich auf PostgreSQL gehen aber der Kollege war Feuer und Flamme für MySQL. Nachdem ich beide nur am Rande kannte und ich aus noch früheren Zeiten den Ruf des langsamen Elefanten von PostgreSQL im Ohr klingeln hatte ("ist eher wie Oracle"), haben wir dann halt MySQL genommen. Tja, Kollege weg, MySQL am Bein.
 
Zuletzt bearbeitet:

berndoa

Top Contributor
Java:
FROM dbo.Range A,dbo.Range B,dbo.Range C
das ist glaub ich eher bekannt als "oracle join" ansich ist es nur eine kürzere schreibweise für inner joins
die inner join klausel ist in allen sql systemen verfügbar

das so zuschreibne ist in oracle und sql server verfügbar und ich glaube auch in sqlite aber bin mir nicht sicher, inner join muss es aber auf jeden fall haben die "buchstaben" danach wie A B C sind aliase dh wenn ich schreibe

dann macht es mir hier einen alias draus und ansich steht dann da

"im Schema dbo, nimm die Tabelle Range, und von der tabelle die spalte Range"
nur wenn ich 2 mal einen gleichen spalten namen lade kann ich es ja nimmer auseinander halten deswegen muss ich diese aliase benutzen

Code:
AND A.First IN (@one ,@two,@three,@four,@five,@six)
diese variablen waren nur als test gedacht damit ich beweisen kann dass mein code richtig ist. Das funktioniert so auch nur in transact sql.

was eher interessant ist ist folgendes
Code:
triple.First IN (Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth)
das sagt aus "wenn der wert von der tabelle triple der spalte First in der werte sammlung Sixtel.First,Sixtel.Second,Sixtel.Third,Sixtel.Fourth,Sixtel.Fith,Sixtel.Sixth irgendwo vorkommt dann liefere true zurück ansonstent halt nicht"



Code:
TRUNCATE TABLE dbo.Triples
INSERT INTO dbo.Triples SELECT * FROM dbo.Range A,dbo.Range B,dbo.Range C
WHERE
    A.Range != B.Range
    AND A.Range != C.Range
    AND B.Range != C.Range
    AND A.Range < B.Range
    AND B.Range < C.Range
der teil macht "leere die tabelle dbo.Triples"
"Füge in die tabelle triples das ergebnis von dem select ein"

das sollte dein sqlite browser ansich so können, bin mir aber unsicher


hier ist es vllt einleuchtender mit meiner tabellen struktur
Anhang anzeigen 19830

ich habe mir alle werte aus dbo.Range erzeugt, in dbo.Range gibts nur die zahlen von 1 bis 49

was wichtig ist, ich habe da transact sql geschrieben, du hast aber sqlite sql dh du hast das überhaupt nicht oder musst es noch hinzufügen


in transact sind das variablen mit dem @ zeichen
Java:
DECLARE @one int,@two int,@three int,@four int,@five int,@six int;
SET @one = 1
SET @two = 2
SET @three =3
SET @four =4
SET @five =5
SET @six =6
habe mir hier einfach mal ein sextupel zusammen geschustert um zu beweisen dass ich auch auf die 20 komme


kann es sein dass du noch mit cobol gelernt hast oder etwas älter bist? der ansatz dass man "einen datensatz lest und den auswertet und dann weiter latscht" ist eig von der zeit vor datenbanken ( diese denkweise zwingt die meisten datenbanken in die knie )
Och, so alt sehe ich mich mit meinen rund 30 jahren noch nicht :)

Hatte nur mit Datenbanksachen noch nie zu tun.
Hatte vor 15 Jahren im Informatik grundkurs vielleicht mal ein paar Tage MySQL aber dass wars.
Als ich die Ursprungsfrage hier stellte, hatte ich an dem Tags mittags zum ersten Mal in Datenbanken und SQL überhaupt reingeguckt.

Dass es Select, Insert und so gibt und was der einzelne Befehl tut, ist mir halbwegs klar bzw. kann ich nachschlagen. Aber so in Kombination ist mir dann nicht gleich auf Anhieb klar was es bewirken soll.
Bin halt generell noch gar nicht in SQL Syntax drin und habe ausser "Zahlen aus Tabellen ablesen" Null Ahnung wie mächtig (oder auch nicht) SQL und Co. sind.
 
Y

yfons123

Gast
was ganz wichtig ist zu verstehen ist dass "SQL" eigentlich nur eine abfrage sprache ist und keine turing komplette sprache ist
die kann
insert update delete select an sich (und die DDL anweisungen )

SQL hat gar kein IF oder FOR oder WHILE oder variablen ( wo ich mir nicht sicher bin), sprachen wie "Transact SQL" oder "PL SQL" oder "PGSQL" fügen der Sprache dann das hinzu und dann hast du eine turing komplette sprache


ich habe die beispiele in transact sql geschrieben
es ist eigentlich wurscht welche sprache du hernimmst da du meistens in java nur sql anweisungen ausführst die dem SQL standard entsprechen also von allen "Erweiterungen" auch gelesen werden können
die erweiterungen halten sich auch dran

sqlite hat auch ein spezielles sql wie zb sqlite kann keine stored procedures erstellen, was transact sql und PL SQL schon kann
also da gibts unterschiede

MYSQL hat glaub ich wieder was eigenes
 

berndoa

Top Contributor
was ganz wichtig ist zu verstehen ist dass "SQL" eigentlich nur eine abfrage sprache ist und keine turing komplette sprache ist
die kann
insert update delete select an sich (und die DDL anweisungen )

SQL hat gar kein IF oder FOR oder WHILE oder variablen ( wo ich mir nicht sicher bin), sprachen wie "Transact SQL" oder "PL SQL" oder "PGSQL" fügen der Sprache dann das hinzu und dann hast du eine turing komplette sprache


ich habe die beispiele in transact sql geschrieben
es ist eigentlich wurscht welche sprache du hernimmst da du meistens in java nur sql anweisungen ausführst die dem SQL standard entsprechen also von allen "Erweiterungen" auch gelesen werden können
die erweiterungen halten sich auch dran

sqlite hat auch ein spezielles sql wie zb sqlite kann keine stored procedures erstellen, was transact sql und PL SQL schon kann
also da gibts unterschiede

MYSQL hat glaub ich wieder was eigenes
So von den ganzen sql varianten die es da so gibts, gibts auch eins das keine "Light" version ist und alles kann?

Ja, sowas wie die klassischen if, while, etc. vermisse ich.
Damit könnte ich viel easier meine wunschabfragen formulieren als in zusammengefügten sql befehlen ohne punkt, komma und klammerung.

Weiß im prinzip nicht mal wenn da so wie oben
select insert etc. nachinander kommen, was daovn in welcher reihenfolge abgearbeitet wird und wessen ergebnis dann vom anderen wieder benutzt wird.

Bspw. oben bei dem

SQL:
TRUNCATE TABLE dbo.Triples
INSERT INTO dbo.Triples SELECT * FROM dbo.Range A,dbo.Range B,dbo.Range C
WHERE
    A.Range != B.Range
    AND A.Range != C.Range
    AND B.Range != C.Range
    AND A.Range < B.Range
    AND B.Range < C.Range


Truncate ist ein eigener befehl, der einfahc den tabelleninhalt löscht, klar.

Aber danach, da wäre mir normal unklar was passiert.
Select ..from ... where.. ist eine ein heit, klar.

Wird mir eine hübsche Tabelle angezeigt, die die ausgewählten inhalte hat.
wobei fraglich wäre ob dann 3 spalten angezeigt werden weil ja irgendwie mit 3 aliasen für 3 mal dieselbe spalte (mindfuck :O) gewerkelt wird irgendwie.

Wären wir in Java, würde ich mir da gewissermassen klammern drum erhoffen weil hier ja auch zuerst das select bearbeitet wird. und dessen ergebnis sozusagen als input vor den davor stehenden befehl genutzt wird.

andererseits steht truncate vor insert und wird trotzdem zuerst ausgeführt.

Mir fehlt vemrutlich einfahc die erfahrung mit sql bisher.

Ich bin da java gewohnt, wo eine methode um alles, was als parameter/input dient, eine klammer hat insert(...,select(...),..)
und voneinander unabhängige sachen eben durch ; getrennts sind.

Scheints bei sql scheinbar nicht zu geben, da weiß man offenbar die reihenfolge in der sahcen passieren. oder nicht :-/
 
Zuletzt bearbeitet:
Y

yfons123

Gast
So von den ganzen sql varianten die es da so gibts, gibts auch eins das keine "Light" version ist und alles kann?
naja uhmmm "Light" version nicht wirklich

1. jede dieser Optionen erfüllt den SQL standard dh alles was du in sql kennst kann jede dieser sprachen
2. es unterscheidet sich nur die syntax
3. mancher "schnick schnack" ist nicht vorhanden in manchen sprachen

zb ein schnick schnack sind stored procedures
die sind nicht lebens notwendig

sqlite sollte sollte eigentlich alles können, hat ein if hat einen loop.. damit ist alles da

den "schnick schnack" hat sqlite nicht.. soll ja lite sein
 

mihe7

Top Contributor
was ganz wichtig ist zu verstehen ist dass "SQL" eigentlich nur eine abfrage sprache ist und keine turing komplette sprache ist
Mittlerweile ist SQL Turing-vollständig (https://wiki.postgresql.org/wiki/Cyclic_Tag_System) - allerdings bringt uns das ja auch nicht weiter :)

Bin halt generell noch gar nicht in SQL Syntax drin und habe ausser "Zahlen aus Tabellen ablesen" Null Ahnung wie mächtig (oder auch nicht) SQL und Co. sind.
Ziemlich. Allerdings wäre das für mich nicht ausschlaggebend. Die DB soll Daten verwalten, gerne auch mal eine Berechnung durchführen aber das wars auch schon - und das können die Dinger richtig gut. Kein Mensch will komplexe Logik in SQL schreiben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
H SQLite Sqlite Datenbank direkt einbinden. Datenbankprogrammierung 5
J SQLite Login Datenbank Datenbankprogrammierung 2
G SQLJet (SQLite) - Mehrbenutzerzugriff auf Datenbank handhaben Datenbankprogrammierung 1
P Datenbank für Java Anwendung wie SQLite ohne Installation Datenbankprogrammierung 4
T SQLite Alternativen zu SQlite, dateibasiert, leicht verschlüsselbar, Nutzerverwaltung Datenbankprogrammierung 21
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
Maxim6394 JPA 3.2 & SQLite - LocalDateTime wird falsch geladen Datenbankprogrammierung 1
Maxim6394 EclipseLink + SQLite | Unable to acquire a connection from driver [null] Datenbankprogrammierung 6
J SQLite Abfrage fehlerhaft - komme nicht weiter - please help. Datenbankprogrammierung 3
thor_norsk SQLite Fehlermeldung Datenbankprogrammierung 4
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
B SQLite Befehl bauen? Datenbankprogrammierung 4
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D SQLite Collections oder Arrays in SQLite abbilden Datenbankprogrammierung 7
N ORM für Sqlite Datenbankprogrammierung 4
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
N SQLite Datenbankprogrammierung 2
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
X Sqlite Fks Datenbankprogrammierung 4
X SQLite SQLite Programm beendet/führt nicht weiter aus Datenbankprogrammierung 12
Sam96 SQLite mit JavaFX Datenbankprogrammierung 1
T sqlite select Datenbankprogrammierung 12
V SQLite Performance: 1 Datei mit einzelnen Einträgen gegenüber SQLite Datenbankprogrammierung 7
F Java SQLite Error Datenbankprogrammierung 19
F Sqlite cannot commit Datenbankprogrammierung 2
U Dom Parser und SQLite füllen Datenbankprogrammierung 5
D SQLite Datenkbank auf WebServer möglich? Datenbankprogrammierung 4
M Datenbankausgabe .jsp per SQLite Datenbankprogrammierung 7
M SQLite Einstieg mit SQLite, wohin mit der DLL? Datenbankprogrammierung 7
M SQLite Speicherpfad Datenbankprogrammierung 0
G SQLite SQLite Select für View vereinfachen/optimieren Datenbankprogrammierung 4
G sqlite innerjoin Datenbankprogrammierung 5
G SQLite Daten aus SQLite DB in andere SQLite DB importieren Datenbankprogrammierung 4
R sqlite UPDATE wirkt nicht aus Java Datenbankprogrammierung 7
G SQLite SQLite Abfrage Datenbankprogrammierung 4
F SQLite-Extensions unter Java Datenbankprogrammierung 2
H SQLite mit DefaultTableModel synchronisieren Datenbankprogrammierung 5
D SQLite Statement nimmt keine Namen aus getter-Methoden Datenbankprogrammierung 11
L SQLite fügt nur den ersten Datensatz ein Datenbankprogrammierung 2
S SQLite Ausführbares Jar mit SQLite DB Datenbankprogrammierung 4
F [SQLite] Mehrere Datensätze einfügen Datenbankprogrammierung 12
H SQLite Datenkbank erstellen Datenbankprogrammierung 3
S Abfrage auf SQLite-DB Datenbankprogrammierung 2
Kasoki SQLite SQLite oder doch XML!? Datenbankprogrammierung 2
G SQLite Abfrage, ob in Tabelle X Spalte Y existiert Datenbankprogrammierung 4
S SQLite in JAR Datenbankprogrammierung 8
J SQLite --> Java SDK Datenbankprogrammierung 7
P Sqlite API für JAVA ? Datenbankprogrammierung 9
feuervogel SQLite unter Linux mit Eclipse einrichten Datenbankprogrammierung 8
K SQLite Datenbankprogrammierung 5
S SQLite oder RDBMS als Datei(nicht Client/Server) Datenbankprogrammierung 5
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
L SQL Datenbank Datenbankprogrammierung 7
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
anton1 Online Datenbank Datenbankprogrammierung 7
krgewb H2-Datenbank öffnen Datenbankprogrammierung 8
J Datenbank abfragen Datenbankprogrammierung 6
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
P Enum in der Datenbank Datenbankprogrammierung 1
Z SQL- Datenbank 1.PK zu 2.FK Datenbankprogrammierung 3
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
MiMa wo Datenbank verbinden/trennen? Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
DeltaPilot12 Datenbank connect Funktion Datenbankprogrammierung 7
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben