Prepared Statement scheint nicht zu funktionieren

Status
Nicht offen für weitere Antworten.
P

plichel

Gast
Hallo zusammen,

seit ein paar wochen hab ich nen Ubuntu 5.1. Darauf läuft ne MySQL Datenbank (4.1.12) auf die ich von Java (1.5, Compiler-kompatibiltät aber 1.4) aus zugreife. Dabei habe ich folgendes Problem:

Scheinbar wird ein INSERT, wenn es als Prepared Statement ausgeführt wird, nicht korrekt abgearbeitet, da folgender
Code

Code:
        String sql_test="INSERT INTO test (fvarchar,fchar,fint,flong) VALUES ('string','test',100,100)";
    	String sql_test_ps="INSERT INTO test (fvarchar,fchar,fint,flong) VALUES (?,?,?,?)";
    	
    	this.connect();
    	this.ps=conn.prepareStatement(sql_test);
    	System.out.println(ps.toString());
    	this.ps.execute();
    	
    	
    	this.ps=conn.prepareStatement(sql_test_ps);
    	this.ps.setString(1,"string1");
    	this.ps.setString(2,"test");
    	this.ps.setInt(3,100);
    	this.ps.setInt(4,100);
    	System.out.println(ps.toString());
    	this.ps.execute();

komischerweise das folgende Resultat bringt:


mysql> select * from test;
+----------+-------+----------+-----------+
| fvarchar | fchar | fint | flong |
+----------+-------+----------+-----------+
| string | test | 100 | 100 |
| | \uffff | 50396416 | 117441280 |
+----------+-------+----------+-----------+
2 rows in set (0.00 sec)


Jemand ne idee ?

gruss,
plichel
 
P

plichel

Gast
ANMERKUNG:

Also das Problem ist, dass das Ergbnis des INSERTS mit Prepared Statement nicht den gewünschten Datensatz einfügt sondern irgendwas anderes:

Die erste Zeile ist ohne Prepared Statement (alles schick) die zweite mit. (die Werte der zweiten Zeile haben wenig mit der ursprünglichen Query zu tun) (Ausgabe der mysql-konsole:)

Code:
mysql> select * from test;
+-----------+-----------+--------------+----------------+
| fvarchar | fchar      | fint             | flong             |
+-----------+-----------+--------------+----------------+
| string     | test        |  100            |  100              |
|                 | \uffff       | 50396416 | 117441280 |
+-----------+-----------+--------------+-----------------+
2 rows in set (0.00 sec)


(der Wert \ufff wurde in der mysql-konsole als kästchen dargestellt)
 

Bleiglanz

Gesperrter Benutzer
mach mal ein ps.close() rein bevor du weiterarbeitest, daran liegts aber vermutlich nicht

irgendwas in der datenbank-URL komisch?

was macht this.connect()?

sonst seh ich jetzt auch keinen Fehler...
 
P

plichel

Gast
schonmal danke dass du ich mit dem problem beschäftigst...

nur leider hab ich diese sachen auch schon vergeblich gecheckt. zudem sollte ich erwähnen, dass der code auf einem suse9.?, schonmal ordentlich funktioniert hat. dies würde dann eigentlich nahelegen, dass irgendwelche konfigurations-sachen nicht korrekt eingestellt sind. hält es jemand für möglich dass das problem an mysql oder sonstwo ausserhalb java liegt ? wäre ja eigentlich quatsch, da ja die query ohne prep. stat. korrekt arbeitet und es auch früher schon mal lief.

aber trotzdem mal noch der restliche code.

Code:
protected String dbClass = "com.mysql.jdbc.Driver";
protected static String dbUrl = "jdbc:mysql://localhost/dbname";

private void connect() throws Exception {

    	Class.forName(this.dbClass).newInstance(); 
        try {
        	this.conn = DriverManager.getConnection(dbUrl, "user", "pwd");
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
 

Bleiglanz

Gesperrter Benutzer
schmeiss mal das logging an (my.cnf) und schau, welchen SQL Befehl dein Programm tatsächlich schickt...
 
P

plichel

Gast
ok habs angestellt. hier sieht man dann auch, dass mysql schon die "abgewandelte" query ausführt:

auszug aus mysql.log:

Code:
...
                      
                      8 Connect     root@localhost on dbname
                      8 Query       SET NAMES latin1
                      8 Query       SET character_set_results = NULL
                      8 Query       SHOW VARIABLES
                      8 Query       SHOW COLLATION
                      8 Query       SET autocommit=1
                      8 Prepare     [1] INSERT INTO test (fvarchar,fchar,fint,flong) VALUES ('string','test',100,100)
                      8 Execute     [1] INSERT INTO test (fvarchar,fchar,fint,flong) VALUES ('string','test',100,100)
                      8 Prepare     [2] INSERT INTO test (fvarchar,fchar,fint,flong) VALUES (?,?,?,?)
                      8 Execute     [2] INSERT INTO test (fvarchar,fchar,fint,flong) VALUES ('','\uffff',50396416,117441280)
 
P

plichel

Gast
kannst du vielleicht nochmal kurz sagen was ein PFF treiber ist, wozu er da ist und waran du gesehen hast dass dieser nicht funktioniert ! hab mal gegoogelt und das eine resultat hatte nichts mit mysql oder java zu tun gehabt...
 
P

plichel

Gast
die zeile: useServerPrepStmts=true war sowieso schon auskommentiert. wenn ich sie aktiviere dann kennt das mysql gar
nicht:
Code:
060112  9:29:07 [ERROR] mysqld: unknown variable 'useServerPrepStmts=true'
 

Bleiglanz

Gesperrter Benutzer
PFF sollte nur luftablassen :)

ist klar dass der Treiber hier einen BUG hat, weil ja ein falscher SQL Befehl übergeben wird

entweder du besorgst dir wirklich den allerneuesten

( oder einen älteren, der von den serverseitigen PrepStatements nichts weiss ...)

oder man kann das in der Connection URL abschalten ?
 
P

plichel

Gast
DANKE für die Hilfe !!

ich habs jetzt mit nem älteren treiber wieder zum laufen bekommen (mysql-connector-java-3.0.17-ga)

kann zwar damit nicht so richtig zu frieden sein, aber ist mir jetzt erstma ziehmlich hosenträger. hauptsache es läuft...

wg "PFF Treiber" : man klammert sich dann halt an jeden strohhalm...
 
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
W Prepared Statement mehrere Zeichenketten Datenbankprogrammierung 4
G Keine Aussicht mit Prepared Statement Datenbankprogrammierung 10
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

Ähnliche Java Themen

Neue Themen


Oben