java - stmt - select sentencia preparada
Usar declaraciones preparadas para establecer el nombre de la tabla (6)
Como han dicho varias personas, no puede usar un parámetro de declaración para un nombre de tabla, solo para variables como parte de la condición.
Basado en el hecho de que tiene un nombre de tabla variable con (al menos) dos nombres de tabla, quizás sería mejor crear un método que tome la entidad que está almacenando y devuelva una declaración preparada.
PreparedStatement p = createStatement(table);
Estoy tratando de usar declaraciones preparadas para establecer un nombre de tabla para seleccionar datos, pero sigo recibiendo un error cuando ejecuto la consulta.
El error y el código de muestra se muestran a continuación.
[Microsoft][ODBC Microsoft Access Driver] Parameter ''Pa_RaM000'' specified where a table name is required.
private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [?]"; //?=date
public Execute(String reportDate){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(Display.DB_MERC);
PreparedStatement st = conn.prepareStatement(query1);
st.setString(1, reportDate);
ResultSet rs = st.executeQuery();
¿Alguna idea de lo que podría estar causando esto?
Esto es técnicamente posible con una solución, pero muy mala práctica.
String sql = "IF ? = 99/n";
sql += "SELECT * FROM first_table/n";
sql += "ELSE/n";
sql += "SELECT * FROM second_table";
PreparedStatement ps = con.prepareStatement(sql);
Y luego, cuando desee seleccionar desde first_table, configure el parámetro con
ps.setInt(1, 99);
O si no, lo configuras para otra cosa.
Hay una manera de pasar el nombre de la tabla como una variable
String NameOfTable = "test.Employee";
String Fquery = "SELECT * FROM" + NameOfTable + "donde Done = ''No''";
Nota: debe haber un espacio entre FROM y el siguiente "y también entre" y donde palabra clave
No estoy seguro de que pueda usar un PreparedStatement para especificar el nombre de la tabla, solo el valor de algunos campos. De todos modos, podrías intentar la misma consulta pero, sin los corchetes:
"SELECT plantID, edrman, plant, vaxnode FROM ?"
Un nombre de tabla no puede usarse como parámetro. Debe estar codificado. Entonces puedes hacer algo como:
private String query1 = "SELECT plantID, edrman, plant, vaxnode FROM [" + reportDate + "?]";
String table="pass";
String st="select * from " + table + " ";
PreparedStatement ps=con.prepareStatement(st);
ResultSet rs = ps.executeQuery();