Suche In SQL Datenbank mit array

Sidet

Mitglied
Hallo,

ich habe in meinem Programm eine SQL Datenbank angelegt, die die Spalten "name", "phase" und einen primary key hat.

Ich will nun herausfinden, wie viele Einträge in dieser Datenbank zum einen:
- eine bestimmtePhase haben und gleichzeitig
- einen key haben, der in einem int[] Array enthalten ist.

Mein bisheriger Ansatz:
Java:
int [] array = new int[] {1,2,3,4,5};
String ids = array.toString();
ids.replace("[","(").replace("]",")");
int i = 2;
int count;
      
Cursor c = database.rawQuery("SELECT * FROM cards WHERE phase='"+i+"' AND type in "+ids+"",null);
if (c.moveToFirst()){
    count=c.getCount();
}else{
    count=0;
}

Der Fehler sieht dann so aus:
Caused by: android.database.sqlite.SQLiteException: no such table: 1, 2, 3, 4, 5 (code 1): , while compiling: SELECT * FROM cards WHERE phase='1' AND type in [1, 2, 3, 4, 5]

Jetzt wären meine Fragen:
1. Wie kann ich prüfen, ob der Eintrag "phase" der Datenbank im array enthalten ist?
2. Gibt es eine elegantere Methode die Anzahl der passenden Einträge festzustellen? So wie es hier steht funktioniert es zwar (ohne den AND Zusatz in der Query), aber es kommt mir etwas klobig vor...

Schonmal vielen Dank für Eure Zeit und Hilfe :)
 
K

kneitzel

Gast
Nein, Cursor wird bitte immer vermieden, wenn es irgendwie geht. Das Killt die Performance massiv.

Wenn DU SQL Abfragen machen willst, dann solltest Du Dir da zumindest die Grundlagen aneignen.
@krgewb hat Dir gezeigt, wie Du die Anzahl von Datensätzen ermitteln kannst.

In Deinem SQL müssten die Werte in Klammern kommen also "type in (1, 2, 3, 4)" oder so.

ABER:
Die SQL Abfrage selbst solltest Du generell nicht so zusammen bauen aus Strings. Dazu gibt es PreparedStatement und Du willst die beiden Parameter in einem PreparedStatement mitgeben. Da könnte dann ggf. auch die Methode createArrayOf von Connection interessant sein.

Und als Einführung evtl.:
 

mihe7

Top Contributor
Eine standardkonforme Lösung wäre etwas wie:

Java:
private static String QUERY = "SELECT count(*) FROM cards WHERE phase=? AND type = ANY(?)";
private Connection conn;

public long count() throws SQLException {
    try(PreparedStatement stmt = conn.prepareStatement(QUERY)) {
        stmt.setInt(1, phase);
        stmt.setArray(2, conn.createArrayOf("INTEGER", array);
        try(ResultSet rs = stmt.executeQuery()) {
            return rs.getLong(1);
        }
    }
}

Allerdings unterstützen das nicht alle DBMS bzw. JDBC-Treiber. Alternativ kann man statt "= ANY(?)" auch "IN (?)" versuchen und dann im Code mit setObject statt mit setArray arbeiten: stmt.setObject(2, array);. Das dürfte zumindest in MySQL funktionieren. Daneben gibt es dann noch DBMS-spezifische Varianten.

So lange die Zahl der Parameter überschaubar bleibt, kann man auch eine geeignete Query zusammenbauen, also "IN (?, ?, ? ...)" schreiben, wobei das Auslassungszeichen natürlich du eine entsprechende Zahl an ", ?" zu ersetzen wäre. Dann muss auch jeder Parameter gesetzt werden, also etwas wie

Java:
int param = 2;
for (int value : array) {
    stmt.setInt(param, value);
    param++;
}

verwendet werden. Das wärs erstmal.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Suche für meine Anwendung optimale Datenbank ! Datenbankprogrammierung 26
L SQL-Suche Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
R Suche den nächsten timestamp Datenbankprogrammierung 5
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
M SQLite Suche nach String Datenbankprogrammierung 4
K JPA Suche Datenbankprogrammierung 14
J SELECT Abfrage/Suche Datenbankprogrammierung 4
AssELAss Oracle Suche nach Umlauten Ä und Ae ermöglichen Datenbankprogrammierung 11
AssELAss Oracle Wildcard-Suche über zwei Felder Datenbankprogrammierung 5
ARadauer Umgekehrte Suche mit Wildcards Datenbankprogrammierung 4
N suche embedded key-value-datenkank Datenbankprogrammierung 2
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
F suche Erstanschub für DB-Zugriff Datenbankprogrammierung 9
fastjack Kombinierte Suche und verschiedene Datumsformate Datenbankprogrammierung 2
B Suche Query um genau einen Wert einer def. Gruppe aus einer Tabelle zu erhalten. Datenbankprogrammierung 2
A Suche Datenbankprogrammierung 4
U Suche OpenSource Projekt ? Datenbankprogrammierung 9
J Suche geeignete Datenbankstruktur Datenbankprogrammierung 3
M sql-code für suche in tabelle nach höchster transaktionsnr Datenbankprogrammierung 12
H Suche ein Hibernate-DAO-Gerüst zum lernen Datenbankprogrammierung 9
S LIKE - Suche in DB Datenbankprogrammierung 18
R MySQL Syntax für suche nach Textteil Datenbankprogrammierung 8
F Suche JDBC-Treiber-Installationsanleitung (SUSE Linux) Datenbankprogrammierung 18
F suche MySQl-Befehl um Datensatz an Tabellenende zu schreiben Datenbankprogrammierung 2
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
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
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
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
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
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
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
J JAR-Datei und Datenbank Datenbankprogrammierung 8
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
C String in Datenbank einfügen Datenbankprogrammierung 11
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
G Datenbank Statement Datenbankprogrammierung 22
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S Datenbank MySQL und Java Datenbankprogrammierung 8
M H2 Verbindung zur Datenbank komplett schließen Datenbankprogrammierung 11
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
L Appabsturz mit Datenbank Datenbankprogrammierung 4
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
L Datenbank sichern Datenbankprogrammierung 8
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
J Datenbank VPS Server Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
S Datenbank/Java true/false Datenbankprogrammierung 8
J JUNIT und CRUD-Datenbank Datenbankprogrammierung 4
F Datenbank/Datenabgleich/Wiederholungsabfrage Datenbankprogrammierung 12

Ähnliche Java Themen

Neue Themen


Oben