PreparedStatement setArray(int i, java.sql.Array)

Status
Nicht offen für weitere Antworten.

SilentJ

Bekanntes Mitglied
Hallo,

zwei Fragen zu der Methode in der Überschrift:

1. Unterstützt Microsoft Access via JDBC-ODBC-Bridge diesen Aufruf?

2. Wie transformiere ich ein String-Array in ein Objekt, das die Schnittstelle java.sql.Array implementiert, wenn (1.) gilt, was ich bisher nicht überprüfen konnte, da ich bei (2.) nicht weiterkomme.

Alles ist manchmal wie ein Möbiusband. :)

Für Antworten wäre ich sehr dankbar.

PS: Die Verwendung von Access ist für mich immer noch Legion.
 

SilentJ

Bekanntes Mitglied
Die JdbcOdbcPreparedStatement Methode wirft eine UnsupportedOperationException für setArray.
Echt toll. Vielen Dank, Sun.
 
T

tuxedo

Gast
Danke für den Hinweis. Mit der Info hab ich jetzt mein jPMdbc angepasst. Hatte immer eine SQLException geworden. die UnsupportedOperationException ist dann bei nicht unterstützten Methoden doch geschickter ;-)

- Alex
 

SilentJ

Bekanntes Mitglied
Schön, dass ich helfen konnte.

Doch das Problem, dass Du die fehlende setArray-Unterstützung von Sun entsteht, kann ich nicht ohne Performanzeinbußen lösen, scheint mir. Alles ein Käse. :x
 
T

tuxedo

Gast
Hmm, ich habdie Erfagrung gemacht dass Sun auch nur mit Wasser kocht: Viele der JDBC-Methoden bauen auf anderen auf.

Schau doch mal in die Quellen anderen JDBC-Treiber, vielleicht findest du eine elegante Lösung ohne den Treiber verändern zu müssen (eigene setArray-Methode basteln die existierende Methoden der PreparedStatement-Klasse nutzt).

- Alex

[update]

Hab gerade geschwind in die Quellen des Connector/J von MySQL geworfen: Die haben die Methode auch nicht implementiert... werfen aber keine UnsupportedOperationException sondern eine "eigene":

Code:
public class NotImplemented extends java.sql.SQLException {
	// ~ Constructors
	// -----------------------------------------------------------

	/**
	 * Creates a new NotImplemented object.
	 */
	public NotImplemented() {
		super(
				Messages.getString("NotImplemented.0"), SQLError.SQL_STATE_DRIVER_NOT_CAPABLE); //$NON-NLS-1$
	}
}

- Alex
 

SilentJ

Bekanntes Mitglied
Ich habe keinen blassen Schimmer, wie ich überhaupt einen Blick in die Klassen werfe. Die Source des JdbcOdbc-Pakets finde ich nicht.

Ganz super. Danke für deine Bemühungen. :(
 
T

tuxedo

Gast
Es hilft dir ja nichts in den JDBC-ODBC Treiber reinzuschauen. Denn wie du ja schon festgestellt hast ist die Funktion da gar nicht implementiert. Mein Rat war in andere JDBC-Treiber reinzuschauen ob du da vielleicht was abgucken kannst.

Mal was anderes:
Du willst mit dem Befehl in eine Spalte ein "Array" schreiben. Vermutlich kann der ODBC Treiber das deshalb nicht weil Access keinen solchen Typ kennt? Wäre das möglich?

Bin kein Access-Profi. Aber ich hab auf die schnelle in Access keine Möglichkeit gefunden einer Spalte einen Typ "ähnlich" Array zu geben.

Was willst du denn als Array speichern? Und wie sieht der Spaltentyp in Access wirklich aus?

- Alex
 

SilentJ

Bekanntes Mitglied
Der JdbcOdbcTreiber stellt keine direkte Verbindung zwischen Java und Access her. Vielmehr muss dabei die in Java formulierte Anfrage in einen ODBC konformen Ausdruck umgewandelt werden. Da wäre mir schon ein Blick in die zuvor genannte Klasse was wert.

Ganz trivial scheint mir die Sache nicht zu sein, wenn ich mir die Preise für kommerzielle Produkte ansehe. Ich gebe an dieser Stelle auf und werde meine Ergebnisse weiterreichen. Tja, was habe ich nicht schon Spaß mit Access gehabt. :( :x :oops:
 
M

maki

Gast
Du solltest ml einen Blick auf Frontend Plus (bzw. JAD) werfen: http://www.kpdus.com/jad.html#gui

Damit lassen sich kompilierte Java Klassen dekompilieren ;)

Abgsehen davon den alten Treiber umzuschreiben, könntest du nicht etwas in dieser Art machen:

Code:
for( int i= 0; i < stringArray.length; i++ )
    pstmt.setString (i, (String) stringArray[i]);

oder so ähnlich?
 

SilentJ

Bekanntes Mitglied
Ich glaube nicht, dass etwas in der Art

Code:
PreparedStatement ps = conn.prepareStatement("Select x.a FROM x WHERE x.b in (?)", ...);

Mit einer Laufvariable richtig zu inititialisieren wäre. Der einzige Parameter ? hat stets den Index 1.
 
M

maki

Gast
wie wär es dann mit

pstmt.setString (i+1, (String) stringArray);

aber wahrscheinlich versteh ich dichgearde nicht und wir reden deshalb an einander vorbei
 
T

tuxedo

Gast
Ich schnalls auch nicht.

Oder soll die Abfrage so irgendwie aussehen (wenn sie fix und fertuig ausgefüllt wurde):

Code:
Select x.a FROM x WHERE x.b in (Wert1, Wert2, Wert3, Wert4,...Wertn)


Das ließe sich ja auch anders machen:

Code:
Select x.a FROM x WHERE x.b = Wert1
OR x.b = Wert2,
OR x.b = Wert3,
OR x.b = Wert4,
...,
OR x.b = Wertn

- Alex
 
M

maki

Gast
Ich versteh diese setArray nicht, auch nicht mithilfe der api doc, was sollte es denn machen?
 
T

tuxedo

Gast
maki hat gesagt.:
Ich versteh diese setArray nicht, auch nicht mithilfe der api doc, was sollte es denn machen?

public void setArray(int i,
Array x)
throws SQLException

Sets the designated parameter to the given Array object. The driver converts this to an SQL ARRAY value when it sends it to the database.

Parameters:
i - the first parameter is 1, the second is 2, ...
x - an Array object that maps an SQL ARRAY value

Ich schätze wenn du ein INSERT mit den Prepared Statements machst kannst du damit den Wert für eine Spalte setzen. Und der Wert ist vom Typ Array. So wie man einer String-Spalte einen String zuweisen kann, kannst du damit einer Array-Spalte einen Array-Wert zuweisen. Problem ist nur: Access kennt kein Spaltentyp "Array", und auch nix was so ähnlich ist. MySQL kanns ja wie gesagt auch nicht.

[update]
ich glaub ich hab die lösung.. momentchen...

- Alex
 

SilentJ

Bekanntes Mitglied
Ich meinte nur, dass Parameter in einem parametrisierten PrepareStatement, also alle "?" mit einem Index versehen sind. Diesen Index kann ich ansprechen. In meinem Beispiel ps.setString(1, "Wert");

Ok. Aber was, wenn ich eine variable Anzahl von abzufragenden Werten eines Parameters habe?

Ich möchte schlicht sagen:

Code:
SELECT x.a FROM x WHERE ("Wert1","Wert2","Wert3" {,... usw.})

Ich weiß im Vorfeld nicht, wie viele Werte ich haben werde, deshalb baue ich mir den String bis jetzt dynamisch zusammen, was mit Zeiteinbußen bei der String-Konkatenation und einen nicht vorkompilierten Query-Statement einhergeht. Das zusammen jage ich über die JDBC-ODBC-Bridge und kann sprichwörtlich Kaffee trinken gehen.

ps.setArray(1, java.sql.Array) ist auch kein Allheilmittel, aber damit wären einige der Probleme behoben. In beiden Fällen, per PreparedStatement wie mit normalem Statement muss man darauf achten, dass der Abfragestring nicht zu lang für Access wird, aber das ist zu verschmerzen - und gar kein Problem, so wie ich das bisher implementiert habe.

Ich lasse mich gerne eines Besseren belehren.

Michael[/b]
 

SilentJ

Bekanntes Mitglied
Danke für die Bemühungen,

ich werde auf meine seit gestern laufende Lösung mit Zeichenkettenkonkatenation zurückgreifen. Die ist zwar schnarchlangsam, läuft aber.

Microsoft Access sage ich für heute adieu.

Michael
 
T

tuxedo

Gast
Okay, jetzt weiß ich was du willst.
Aber wo liegt das Problem denn folgendes zu tun:

Code:
SELECT * FROM meineTabelle
WHERE feldName1 IN( ? );

Code:
	public String getArrayString(String[] a){
		
		StringBuffer sb = new StringBuffer();
		for(int i=0;i<a.length-1;i++)
			sb.append(a[i]+", ");
		sb.append(a[a.length-1]);
		
		return sb.toString();

	}

pstm.setString(1,getArrayString(meinArray));


Normale konkatenation ist zu langsam. Deshalb Stringbuffer. Ist noch ncith ganz Fehlerfrei beim durchlaufen des Arrays, aber es geht ja auch mehr um den Weg ...

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
V SQLite NullPointerException in preparedStatement.close(); Datenbankprogrammierung 8
Neumi5694 SQL-Statement Preparedstatement - try resource vs. Garbage Collector Datenbankprogrammierung 5
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
S CSV Datein in DB übernehmen:PreparedStatement bzw executeBatch() zu langsam Datenbankprogrammierung 11
P MySQL PreparedStatement vs. StoredProcedure vs. executeBatch Datenbankprogrammierung 1
P PreparedStatement IN-Funktion Datenbankprogrammierung 8
R PreparedStatement ohne Parameter? Datenbankprogrammierung 4
turmaline Oracle [PreparedStatement] Klammer fehlt Datenbankprogrammierung 9
C PreparedStatement und null Datenbankprogrammierung 13
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
D MySQL PreparedStatement mit c3p0 schlägt fehl. Warum? Datenbankprogrammierung 3
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
M MySQL preparedStatement und Anführungszeichen Datenbankprogrammierung 6
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G PreparedStatement und Transaktionen Datenbankprogrammierung 2
N Leeres Blob in ein PreparedStatement eintragen Datenbankprogrammierung 2
P PreparedStatement batch und getGeneratedKeys Datenbankprogrammierung 7
T MySQL PreparedStatement mit INSERTs langsam, Batch-Statement auch Datenbankprogrammierung 4
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
Guybrush Threepwood PreparedStatement: execute() oder executeUpdate() Datenbankprogrammierung 3
R PreparedStatement mit verschiedenen Datenbanken Datenbankprogrammierung 2
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
R Zugriff auf SQL im PreparedStatement Datenbankprogrammierung 4
W preparedStatement (MySQL - JDBC) Datenbankprogrammierung 5
Landei PreparedStatement Parameter mehrfach verwenden Datenbankprogrammierung 18
S Create Table mit PreparedStatement Datenbankprogrammierung 2
S Select mit PreparedStatement Datenbankprogrammierung 2
M Preparedstatement SQL-string auslesen Datenbankprogrammierung 13
T PreparedStatement anzeigen Datenbankprogrammierung 10
A PreparedStatement im Servlet - Referenz speichern Datenbankprogrammierung 3
P PreparedStatement - Angabe des PK Datenbankprogrammierung 4
J Fehler beim PreparedStatement Datenbankprogrammierung 2
B PreparedStatement - anzahl ParameterValues Datenbankprogrammierung 6
J PreparedStatement Datenbankprogrammierung 5
C PreparedStatement Datenbankprogrammierung 2
R DB2 PreparedStatement Batches ungültige Reihenfolge Datenbankprogrammierung 4
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben