una recorrer parametros mostrar hacer ejemplo desde datos consultas conectar con busqueda java c++ sql format stream

recorrer - crear consultas sql en c++/java?



mostrar datos de una base de datos en java (4)

¿Qué método prefieres para crear consultas SQL dinámicas? formateo o transmisión? ¿Es solo una preferencia o hay alguna razón por la cual uno es mejor que otro? O cualquier biblioteca especial que le utilices.

EDITAR: Por favor, responda en caso de c ++.


En Java, debe usar un PreparedStatement .

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


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

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

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

No necesita preocuparse por los caracteres especiales en los datos de cadena cuando los pasa a través de setString (). En una ejecución (String), cualquier comilla simple o punto y coma en los datos dará como resultado un error de análisis.

Peor aún es como funcionan los ataques de "inyección sql". Si una cadena como "x" de cust_table, delete from cust_table, select "se ingresa como datos, podría resultar en la declaración de eliminación analizada y ejecutada.

El manejo de números es mucho más eficiente. Una llamada setInt toma un valor entero como es para la cadena SQL equitativa que debe convertir a caracteres, luego el DBMS debe volver a convertirla en un número entero.

Legibilidad. Usted codifica una única declaración de SQL con unos pocos signos de interrogación donde las variables van, que es relativamente fácil de leer, en lugar de analizar mentalmente y analizar una serie de concatenaciones de cadena, generará un ruido adicional para las comillas escapadas, etc.

Sin embargo, hay un par de casos donde execute (String) es realmente mejor.

Donde sus llaves están distribuidas de forma muy desigual. Por ejemplo, si el 95% de sus clientes vive en los EE. UU. Y desea incluir el 4% que vive en Canadá, ¿en qué país es? normalmente daría como resultado un escaneo de espacio de tabla, mientras que con "donde país = ''CA''" tiene 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 se le otorgan que construir una consulta compleja que haga frente a todas las posibles permutaciones de los criterios de entrada.



Cuando no es posible utilizar declaraciones preparadas , encuentro que usar secuencias 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 genial!