Προς το περιεχόμενο

PreparedStatement fails with "You have an error in your SQL syntax"!


AlexandrosG

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα! Προσπαθώ να τρέξω μια απλή κλάση με 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() ¨ολα δουλεύουν μια χαρά.

Δημοσ.

Καλησπέρα! Προσπαθώ να τρέξω μια απλή κλάση με 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() ¨ολα δουλεύουν μια χαρά.

Δημοσ.

Εάν κάνεις:

 

>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();

Δημοσ.

Εάν κάνεις:

 

>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();

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...