parametros - Cómo usar una variable de nombre de tabla para una instrucción preparada java inserte
preparedstatement java insert (5)
Debería agregarlo a la cadena original:
String tableName = "some_table_name";
// some other code
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
¿Necesitas el punto y coma en el strQuery? (Puedes hacerlo, me parece un poco raro :-))
Esta pregunta ya tiene una respuesta aquí:
Estoy usando un objeto Java PreparedStatment para construir una serie de consultas INSERT por lotes. La declaración de consulta tiene el formato ...
String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
... así que tanto los valores de campo como el nombre de tabla son variables (es decir, tengo varias tablas con el mismo formato de columna del cual cada inserción se dirigirá a una diferente). Puedo hacer funcionar los ejecutables si elimino el "?" variable de nombre de tabla y código duro, pero cada instrucción preparada se insertará en una tabla diferente, por lo que debe seguir siendo una variable que llene inmediatamente antes de ejecutar la consulta por lotes utilizando ...
stmt.setString(1, "tableName1");
¿Cómo puedo dejar que esto sea una variable dinámica, por favor?
El nombre de la tabla no se puede usar como parámetro. Debe estar codificado. Pruebe algo como:
String tableName = "tableName1";
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
No puedes. Debe construir el sql con concatenación de cadena / marcador de posición con String.format. la declaración preparada es para los valores de la columna, no para el nombre de la tabla.
Puede usar el marcador de posición en lugar del nombre de la tabla y luego reemplazarlo con su nombre de tabla.
String strQuery = "INSERT INTO $tableName (col1, col2, col3, col4, col5)
VALUES (?,?,?,?,?,?);";
y reemplace cuando conozca el nombre de la tabla
String query =strQuery.replace("$tableName",tableName);
stmt =conn.prepareStatement(query);
Una alternativa podría ser String.format
:
p.ej
String sql = String.format("INSERT INTO $1%s (col1, col2, col3, (etc)", myTablename);