Pregunta

¿Qué método prefieres para crear consultas dinámicas de SQL? formateo o streaming? ¿Es solo por preferencia o por alguna razón, una es mejor que otra? O cualquier biblioteca especial que utilices para ella.

EDITAR: Por favor responde en caso de c ++.

¿Fue útil?

Solución 3

Otros consejos

Siempre use " preparar " habrá un equivalente a prepareStatement, pero el nombre exacto de la función dependerá de su base de datos y la combinación de controladores.

Las ventajas de una declaración preparada sobre una ejecución (String) son muchas: -

La declaración se analiza y un plan de acceso se determina solo una vez cuando " prepare " sentencia se ejecuta. Dependiendo de cuántas veces ejecute la instrucción, esto puede dar como resultado un rendimiento mucho mejor.

No tiene que preocuparse por los caracteres especiales en los datos de cadena cuando lo pasa setString (). En una ejecución (Cadena), cualquier comilla o punto y coma en los datos dará como resultado un error de análisis.

Lo que es peor es cómo " inyección de sql " Los ataques funcionan. Si una cadena de caracteres como " x 'de cust_table; eliminar de cust_table; seleccione " se ingresa como un dato que bien podría resultar en que se analice y ejecute la declaración de eliminación.

El manejo de números es mucho más eficiente. Una llamada a setInt toma un valor entero como es el de la cadena SQL equivalente que debe convertir en caracteres, luego el DBMS tiene que convertirlo de nuevo en un entero.

Legibilidad. Codificas una sola declaración SQL con unos pocos signos de interrogación donde van las variables, que es relativamente fácil de leer, en lugar de analizar y analizar mentalmente una serie de concatinaciones de cadenas.

Sin embargo, hay un par de casos en los que ejecutar (String) es mejor.

Donde tus llaves están distribuidas de manera muy desigual. P.EJ. Si el 95% de sus clientes viven en los EE. UU. Y desea enumerar al 4% que vive en Canadá, entonces " donde país =? & Quot; normalmente daría lugar a una exploración de espacio de tabla mientras que con " donde país = 'CA' " tienes alguna posibilidad de usar un índice.

El otro caso es donde el usuario puede ingresar u omitir varios criterios de búsqueda. Es mucho mejor construir una cadena SQL para los criterios que te dan que construir una consulta compleja que resuelva todas las permutaciones posibles de los criterios de entrada.

En Java, debe usar una PreparedStatement .

PreparedStatement statement = connection.prepareStatement("SELECT * FROM Table WHERE ID = ?");
statement.setInt(1, 17);
ResultSet resultSet = statement.executeQuery();

Cuando no es posible usar sentencias preparadas , encuentro que usar flujos de C ++ es la mejor manera de escribir la consulta:

std::ostringstream sql;
sql << "exec loadStuff(" << param1 << ", " << param2 << ")";

¡No tener que preocuparse por los tipos de parámetros y la longitud de la cadena es excelente!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top