Prepared Statement mehrere Zeichenketten

Status
Nicht offen für weitere Antworten.

willi

Mitglied
Moin!

Folgendes Statement-Beispiel:

"SELECT x, y FROM mytabelle WHERE x IN (?)"

Problem: Wie kann ich nu in das '?' mehrere Zeichenketten reinkriegen? Also z. B. soll da rein 'ja', 'nein', 'vielleicht'.

Wenn ich das per

Code:
setString (1, " 'ja', 'nein', 'vielleicht' ")

mache, klappt es nicht! Leider ist die Anzahl der Zeichenkette variabel. Also kann ich auch nicht mehrere Fragezeichen reinkloppen. Habs auch schon mit escapen der Hochkommas versucht, leider ohne Erfolg. Und somit hoffe ich auf die kompetente Hilfe hier im Forum!

Besten Dank im Voraus.

willi
 
S

SlaterB

Gast
tatsächlich, ist ja lustig, bei Hibernate gibts das,

also entweder direkt hinschreiben
"SELECT x, y FROM mytabelle WHERE x IN ('a', ..)"

oder dynamischer durch eigene Komponenten nachbauen,
wenn dir ein etwas chaotischer Code zusagt:

Code:
  /**
     * Erzeugt einen Teil der HQL-Anfrage, eine Liste mit IN ( ) für eine Menge von
     * Strings (ohne Anführungszeichen, für Zahlen und Parameter geeignet).
     * 
     * @param _attribute
     * @param _parts
     *            zu berücksichtigende Inhalte
     * @return String
     */
    public static String getInList(String _attribute, Object... _parts)
    {
        return getInList(false, _attribute, _parts);
    }

    /**
     * Erzeugt einen Teil der HQL-Anfrage, eine Liste mit IN ( ) für eine Menge von
     * Strings (deren toString(), mit Anführungszeichen, für Zeichenketten geeignet)
     * 
     * @param _attribute
     * @param _parts
     *            zu berücksichtigende Inhalte
     * @return String
     */
    public static String getInListStrings(String _attribute, Object... _parts)
    {
        return getInList(true, _attribute, _parts);
    }

    /**
     * Erzeugt einen Teil der HQL-Anfrage, eine Liste mit IN ( ).
     * 
     * @param _string
     * @param _attribute
     * @param _parts
     *            zu berücksichtigende Inhalte
     * @return String
     */
    public static String getInList(boolean _string, String _attribute, Object... _parts)
    {
        Object[] parts = getObjectArray(_parts);

        StringBuilder b = new StringBuilder("( ");
        int begin = 0;
        int partListLength = 900;
        // kein IN (...) mit mehr als 900 Elementen, mag Hibernate bei > 1000 nicht mehr
        while (parts.length - begin > 0)
        {
            int end = Math.min(parts.length, begin + partListLength);

            if (b.length() > 3)
            {
                b.append(" OR ");
            }
            b.append(_attribute);
            b.append(" IN ( ");

            // p("begin: "+begin+", end: "+end+", "+parts.length);
            b.append(getList(_string, begin, end, parts));
            begin = end;
            b.append(" ) ");
        }
        b.append(") ");

        return b.toString();
    }

    /**
     * Erzeugt eine komma-getrennte Liste für ein Array von Objekten.
     * 
     * @param _parts
     *            zu berücksichtigende Inhalte
     * @return String
     */
    public static String getList(Object... _parts)
    {
        return getList(false, 0, -1, _parts);
    }

    /**
     * Erzeugt eine komma-getrennte Liste für ein Array von Objekten (deren toString()).
     * 
     * @param _string
     * @param _begin
     * @param _end
     * @param _parts
     *            zu berücksichtigende Inhalte
     * @return String
     */
    public static String getList(boolean _string, int _begin, int _end, Object... _parts)
    {
        Object[] parts = getObjectArray(_parts);
        int end = _end;
        if (end < 1 || end > parts.length)
        {
            end = parts.length;
        }
        int begin = _begin;
        if (begin < 1)
        {
            begin = 0;
        }
        StringBuilder b = new StringBuilder("");
        for (int i = begin; i < end; i++)
        {
            if (i > begin)
            {
                b.append(", ");
            }
            if (_string)
            {
                b.append("'");
            }
            b.append(parts[i]);
            if (_string)
            {
                b.append("'");
            }
        }
        return b.toString();
    }

    /**
     * Gibt ein Object-Array zum Object-Array-Parameter zurück. Erstellt ein Object-Array,
     * sofern eine einzelne Collection übergeben wurde.
     * 
     * @param _objects
     * @return Object[]
     */
    public static Object[] getObjectArray(Object... _objects)
    {
        if (Helper.isEmpty(_objects))
        {
            throw new IllegalArgumentException("empty Object-Array");
        }
        Object[] objects = _objects;
        if (objects.length == 1 && (Collection.class.isInstance(objects[0])))
        {
            Collection c = (Collection)objects[0];
            objects = new Object[c.size()];
            int i = 0;
            for (Object o : c)
            {
                objects[i] = o;
                i++;
            }
        }
        return objects;

    }
 

willi

Mitglied
habs grad auch mit so nem workaround gemacht. sieht zwar nicht gut aus und war auch nicht gerade im sinne des erfinders, aber erfüllt seinen zweck.
ich bastel des prepared statement dynamisch auf und fülle dann entsprechend viele '?' ein, wie ich dann parameter haben. dann wird das prepared statement auf die db losgelassen und dann kann ich ordentlich befüllen.
nich schön, aber geht!

besten dank!!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
C PostgreSQL Prepared Statement Datenbankprogrammierung 7
N Prepared Statement mit unbekannter Anzahl von Where-Clauses Datenbankprogrammierung 30
L MySQL Prepared Statement batch langsamer als bulk insert? Datenbankprogrammierung 10
F Frage zu Prepared Statement Datenbankprogrammierung 2
D Problem: Prepared Statement (Insert) funktioniert nicht. Datenbankprogrammierung 3
G Mit Prepared Statement in MDB schreiben Datenbankprogrammierung 7
W Prepared Statement und Verbindungsverlust Datenbankprogrammierung 4
G Keine Aussicht mit Prepared Statement Datenbankprogrammierung 10
P Prepared Statement scheint nicht zu funktionieren Datenbankprogrammierung 14
N Prepared Statement Datenbankprogrammierung 8
T Prepared Statements und Sets Datenbankprogrammierung 5
L Wiederverwendung von Prepared Statements Datenbankprogrammierung 4
Landei Mehre Werte für einen Prepared-Statement_Parameter übergeben? Datenbankprogrammierung 3
N prepared Statements Datenbankprogrammierung 6
G Flexible Prepared Statements Datenbankprogrammierung 2
F Update mit Prepared Statements Datenbankprogrammierung 10
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
Kotelettklopfer SQLite Verhindern von doppelter Statement Ausführung Datenbankprogrammierung 25
L SQL-Statement SQL Statement doppelte Einträge finden Datenbankprogrammierung 9
C MySQL SQL Statement wir nicht ausgeführt Datenbankprogrammierung 11
G Datenbank Statement Datenbankprogrammierung 22
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
B MySQL Umkreissuche - brauche Hilfe bei SQL Statement Datenbankprogrammierung 12
M CSV Import - Dynamisches SQL Statement Datenbankprogrammierung 15
D Wiederverwendung / Recycling / Queuing von Statement Objekten Datenbankprogrammierung 1
D SQL Statement gesucht... Datenbankprogrammierung 15
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
F Dynamischen String in SQL Statement einbinden Datenbankprogrammierung 9
L SQL Statement mit Switch-Case funktioniert nicht Datenbankprogrammierung 6
U PostgreSQL SELECT Statement Datenbankprogrammierung 5
A Problem mit Create-Statement Datenbankprogrammierung 9
LadyMilka MySQL Syntaxfehler im Statement Datenbankprogrammierung 3
P SQL-Statement Bei meinem Statement ist ein Fehler? Datenbankprogrammierung 2
P sql statement alter table foreign key Datenbankprogrammierung 4
T sql Statement Datenbankprogrammierung 9
B JDBC MySQL Statement Datenbankprogrammierung 3
A Sql Statement - Alle Zahlen größer 9 Datenbankprogrammierung 3
F Sql Statement Datenbankprogrammierung 12
A SQL-Statement prüfen Datenbankprogrammierung 3
W Statement als Klassenvariable Datenbankprogrammierung 27
I Select-Statement optimieren Datenbankprogrammierung 14
D SQLite Statement nimmt keine Namen aus getter-Methoden Datenbankprogrammierung 11
alex_fairytail MySQL SQL Statement Delete zwischen Datum1 und Datum2 Datenbankprogrammierung 5
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
R Derby/JavaDB LIKE Statement mit Wildcard Datenbankprogrammierung 20
R Select Statement als temporärer Table Datenbankprogrammierung 7
R Derby/JavaDB Select Statement Where bedingung will nicht ganz! Datenbankprogrammierung 4
R Derby/JavaDB Select TOP Statement geht nicht Datenbankprogrammierung 3
S Null Pointer exception statement Datenbankprogrammierung 8
R Derby/JavaDB Insert Statement Probleme Datenbankprogrammierung 14
K statement.execute liefert false Datenbankprogrammierung 6
S SQL Statement: executeUpdate Datenbankprogrammierung 15
F wie funktioniert if Statement in SELECT? Datenbankprogrammierung 2
T MySQL PreparedStatement mit INSERTs langsam, Batch-Statement auch Datenbankprogrammierung 4
M MySQL größere von zwei Zahlen in Update Statement Datenbankprogrammierung 2
J [Hibernate] Select Statement Datenbankprogrammierung 4
S HSQLDB DELETE-Statement funktioniert nicht Datenbankprogrammierung 4
L MySQL Kann Statement nicht erzeugen Datenbankprogrammierung 5
T Komme mit dem SQL Statement nicht weiter Datenbankprogrammierung 5
D MySQL Client - Server: Client verabschiedet sich sobald ich Variablen im SQL Statement verwende Datenbankprogrammierung 9
T java.sql.SQLException: unexpected end of statement Datenbankprogrammierung 2
J SQL-Statement Datenbankprogrammierung 10
U MSSQL Verbindung steht, aber meckert beim Statement Datenbankprogrammierung 2
S executeBatch result immet mit Statement.SUCCESS_NO_INFO Datenbankprogrammierung 4
G Frage zum Insert-Statement Datenbankprogrammierung 2
J JDBC- Statement Ausführung nicht persistent Datenbankprogrammierung 2
A Connection Variable in anderer Klasse verwenden -> statement Datenbankprogrammierung 2
Z DELETE-Statement Datenbankprogrammierung 6
G INSERT-STATEMENT Datenbankprogrammierung 6
alexpetri hsql statement problem Datenbankprogrammierung 3
W invalid sql statement ? Datenbankprogrammierung 3
S Probleme mit statement.close() Datenbankprogrammierung 10
G Wie ein SQL-Statement zusammensetzen? Datenbankprogrammierung 5
T Select Statement auf Relation Datenbankprogrammierung 3
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
G MsSQL | Statement.execute(String s) Datenbankprogrammierung 3
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
C Statement/Connection SQLWarning Datenbankprogrammierung 4
J sql-statement Datenbankprogrammierung 7
G Update Statement automatisch unterteilen lassen Datenbankprogrammierung 3
T SQL-Statement parser? Datenbankprogrammierung 11
G Problem mit Suchen Statement Java und MS-SQL-Server Datenbankprogrammierung 9
J SELECT-Statement Datenbankprogrammierung 4
S Statement.getGeneratedKeys() funktioniert nicht Datenbankprogrammierung 4
G Problem mit Delete-Statement Datenbankprogrammierung 3
L mehrere Abfragen mit einem Statement!? Datenbankprogrammierung 5
E Problem mit create-Statement Datenbankprogrammierung 5
E SQL-Statement um eine Nummer in der Datenbank zu suchen Datenbankprogrammierung 3
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
J Mehrere WHERE Werte benutzen Datenbankprogrammierung 2
G ID zuweisung eines TerminKalenders (mehrere Kalender) Datenbankprogrammierung 8
K Mehrere Benutzer Datenbankprogrammierung 6
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
S Abfrage von Gruppentickets(Mehrere Resorts an einem Tag) Datenbankprogrammierung 1
E Mehrere Tabellenspalten mit INNER JOIN verknüpfen Datenbankprogrammierung 1
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben