AlexandrosG Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Καλησπέρα! Προσπαθώ να τρέξω μια απλή κλάση με PreparedStatement και παίρνω You have an error in your SQL syntax... Η κλάση είναι η εξής: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class dummyclass { String driverURL = "org.gjt.mm.mysql.Driver"; String dbURL = "jdbc:mysql://localhost/test"; String username = "root"; String password = "mysqladmin"; Connection conn; ResultSet rows; ResultSetMetaData rowsInfo; public static void main(String[] args){ dummyclass obj = new dummyclass(); obj.tryCode(); } public void tryCode(){ try { Class.forName (driverURL); conn = DriverManager.getConnection(dbURL,username,password); System.out.println("connected!"); String queryString ="SELECT * FROM ? ;"; PreparedStatement printTableStatement = conn.prepareStatement(queryString); printTableStatement.setString(1,"persons"); rows = printTableStatement.executeQuery(); conn.close (); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Το σφάλμα συμβαίνει κατά την εκτέλεση της executeQuery(). Τί κάνω λάθος? Στραβός είμαι και δεν το βλέπω? Σημ. Αν δώσω όλη την SQL εντολή στο queryString, δηλ. String queryString ="SELECT * FROM persons ;"; και αφαιρέσω και τη γραμμή της setString() ¨ολα δουλεύουν μια χαρά.
AlexandrosG Δημοσ. 21 Οκτωβρίου 2010 Μέλος Δημοσ. 21 Οκτωβρίου 2010 Καλησπέρα! Προσπαθώ να τρέξω μια απλή κλάση με PreparedStatement και παίρνω You have an error in your SQL syntax... Η κλάση είναι η εξής: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class dummyclass { String driverURL = "org.gjt.mm.mysql.Driver"; String dbURL = "jdbc:mysql://localhost/test"; String username = "root"; String password = "mysqladmin"; Connection conn; ResultSet rows; ResultSetMetaData rowsInfo; public static void main(String[] args){ dummyclass obj = new dummyclass(); obj.tryCode(); } public void tryCode(){ try { Class.forName (driverURL); conn = DriverManager.getConnection(dbURL,username,password); System.out.println("connected!"); String queryString ="SELECT * FROM ? ;"; PreparedStatement printTableStatement = conn.prepareStatement(queryString); printTableStatement.setString(1,"persons"); rows = printTableStatement.executeQuery(); conn.close (); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Το σφάλμα συμβαίνει κατά την εκτέλεση της executeQuery(). Τί κάνω λάθος? Στραβός είμαι και δεν το βλέπω? Σημ. Αν δώσω όλη την SQL εντολή στο queryString, δηλ. String queryString ="SELECT * FROM persons ;"; και αφαιρέσω και τη γραμμή της setString() ¨ολα δουλεύουν μια χαρά.
anakiou Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Εάν κάνεις: >System.out.println(printTableStatement.toString()); Θα δείς ότι το statement γίνεται: >SELECT * FROM 'persons'; Είναι τα quotes που δημιουργούν το πρόβλημα, δεν μπορείς να περάσεις τον πίνακα σαν παράμετρο. ---------- Προσθήκη στις 15:47 ---------- Προηγούμενο μήνυμα στις 15:27 ---------- Μπορείς να κάνεις αυτό: > String selectString ="SELECT * FROM "; String tableString = "persons"; String queryString = selectString + tableString + ";"; PreparedStatement printTableStatement = conn.prepareStatement(queryString); rows = printTableStatement.executeQuery();
anakiou Δημοσ. 21 Οκτωβρίου 2010 Δημοσ. 21 Οκτωβρίου 2010 Εάν κάνεις: >System.out.println(printTableStatement.toString()); Θα δείς ότι το statement γίνεται: >SELECT * FROM 'persons'; Είναι τα quotes που δημιουργούν το πρόβλημα, δεν μπορείς να περάσεις τον πίνακα σαν παράμετρο. ---------- Προσθήκη στις 15:47 ---------- Προηγούμενο μήνυμα στις 15:27 ---------- Μπορείς να κάνεις αυτό: > String selectString ="SELECT * FROM "; String tableString = "persons"; String queryString = selectString + tableString + ";"; PreparedStatement printTableStatement = conn.prepareStatement(queryString); rows = printTableStatement.executeQuery();
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.