sirve settitle que para java mysql sql

para que sirve settitle en java



Múltiples consultas ejecutadas en java en una sola declaración (6)

¿Por qué no intentas escribir un Stored Procedure para esto?

Puede obtener el Result Set y en el mismo Stored Procedure puede Insert lo que desea.

Lo único es que es posible que no obtenga las filas recién insertadas en el Result Set si lo Insert después de Select .

Hola, me preguntaba si es posible ejecutar algo como esto usando JDBC, ya que actualmente ofrece una excepción aunque es posible en el navegador de consultas MySQL.

"SELECT FROM * TABLE;INSERT INTO TABLE;"

Si bien me doy cuenta de que es posible tener la cadena de consulta SQL dividida y la instrucción ejecutada dos veces, pero me preguntaba si hay un enfoque de una sola vez para esto.

String url = "jdbc:mysql://localhost:3306/"; String dbName = "databaseinjection"; String driver = "com.mysql.jdbc.Driver"; String sqlUsername = "root"; String sqlPassword = "abc"; Class.forName(driver).newInstance(); connection = DriverManager.getConnection(url+dbName, sqlUsername, sqlPassword);


Creo que esta es la forma más fácil para multy selección / actualizar / insertar / eliminar. Puede ejecutar tantas actualizaciones / insertar / eliminar como desee después de seleccionar (tiene que hacer una selección primero (una variable ficticia si es necesario)) con executeUpdate (str) (simplemente use new int (count1, count2, ...)) y si necesita una nueva selección, cierre ''declaración'' y ''conexión'' y haga nueva para la próxima selección. Como ejemplo:

String str1 = "select * from users"; String str9 = "INSERT INTO `port`(device_id, potition, port_type, di_p_pt) VALUE (''"+value1+"'', ''"+value2+"'', ''"+value3+"'', ''"+value4+"'')"; String str2 = "Select port_id from port where device_id = ''"+value1+"'' and potition = ''"+value2+"'' and port_type = ''"+value3+"'' "; try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); theConnection=(Connection) DriverManager.getConnection(dbURL,dbuser,dbpassword); theStatement = theConnection.prepareStatement(str1); ResultSet theResult = theStatement.executeQuery(); int count8 = theStatement.executeUpdate(str9); theStatement.close(); theConnection.close(); theConnection=DriverManager.getConnection(dbURL,dbuser,dbpassword); theStatement = theConnection.prepareStatement(str2); theResult = theStatement.executeQuery(); ArrayList<Port> portList = new ArrayList<Port>(); while (theResult.next()) { Port port = new Port(); port.setPort_id(theResult.getInt("port_id")); portList.add(port); }

Espero que ayude


Puede usar la actualización por lotes pero las consultas deben ser de acción (es decir, insertar, actualizar y eliminar)

Statement s = c.createStatement(); String s1 = "update emp set name=''abc'' where salary=984"; String s2 = "insert into emp values (''Osama'',1420)"; s.addBatch(s1); s.addBatch(s2); s.executeBatch();


Según mis pruebas, la bandera correcta es "allowMultiQueries = true"


Sugerencia: si tiene más de una propiedad de conexión, sepárelas con:

&amp;

Para darte algo como:

url="jdbc:mysql://localhost/glyndwr?autoReconnect=true&amp;allowMultiQueries=true"

Espero que esto ayude a alguien.

Saludos,

Glyn


Me preguntaba si es posible ejecutar algo como esto usando JDBC.

"SELECT FROM * TABLE;INSERT INTO TABLE;"

Sí, es posible. Hay dos formas, hasta donde yo sé. Son

  1. Al configurar la propiedad de conexión de la base de datos para permitir varias consultas, separadas por un punto y coma de forma predeterminada.
  2. Llamando a un procedimiento almacenado que devuelve los cursores implícitos.

Los siguientes ejemplos demuestran las dos posibilidades anteriores.

Ejemplo 1 : (para permitir múltiples consultas):

Al enviar una solicitud de conexión, debe adjuntar una propiedad de conexión allowMultiQueries=true a la url de la base de datos. Esta es una propiedad de conexión adicional a esas si ya existe alguna, como autoReConnect=true , etc. Los valores aceptables para la propiedad allowMultiQueries son true , false , yes y no . Cualquier otro valor se rechaza en el tiempo de ejecución con una SQLException .

String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";

A menos que se apruebe tal instrucción, se lanza una SQLException .

Debe usar execute( String sql ) u otras variantes para obtener resultados de la ejecución de la consulta.

boolean hasMoreResultSets = stmt.execute( multiQuerySqlString );

Para repetir y procesar los resultados, necesita seguir los siguientes pasos:

READING_QUERY_RESULTS: // label while ( hasMoreResultSets || stmt.getUpdateCount() != -1 ) { if ( hasMoreResultSets ) { Resultset rs = stmt.getResultSet(); // handle your rs here } // if has rs else { // if ddl/dml/... int queryResult = stmt.getUpdateCount(); if ( queryResult == -1 ) { // no more queries processed break READING_QUERY_RESULTS; } // no more queries processed // handle success, failure, generated keys, etc here } // if ddl/dml/... // check to continue in the loop hasMoreResultSets = stmt.getMoreResults(); } // while results

Ejemplo 2 : pasos a seguir:

  1. Cree un procedimiento con una o más consultas select , y DML .
  2. Llámalo desde Java usando CallableStatement .
  3. Puede capturar varios ResultSet s ejecutados en el procedimiento.
    Los resultados de DML no se pueden capturar pero pueden emitir otro
    para encontrar cómo las filas se ven afectadas en la tabla.

Tabla de muestra y procedimiento :

mysql> create table tbl_mq( i int not null auto_increment, name varchar(10), primary key (i) ); Query OK, 0 rows affected (0.16 sec) mysql> delimiter // mysql> create procedure multi_query() -> begin -> select count(*) as name_count from tbl_mq; -> insert into tbl_mq( names ) values ( ''ravi'' ); -> select last_insert_id(); -> select * from tbl_mq; -> end; -> // Query OK, 0 rows affected (0.02 sec) mysql> delimiter ; mysql> call multi_query(); +------------+ | name_count | +------------+ | 0 | +------------+ 1 row in set (0.00 sec) +------------------+ | last_insert_id() | +------------------+ | 3 | +------------------+ 1 row in set (0.00 sec) +---+------+ | i | name | +---+------+ | 1 | ravi | +---+------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)

Procedimiento de llamada desde Java :

CallableStatement cstmt = con.prepareCall( "call multi_query()" ); boolean hasMoreResultSets = cstmt.execute(); READING_QUERY_RESULTS: while ( hasMoreResultSets ) { Resultset rs = stmt.getResultSet(); // handle your rs here } // while has more rs