Birden fazla sorgu cümlede java idam
Merhaba MySQL sorgu tarayıcı olarak mümkün olsa da, bu şu anda bir istisna sağlar gibi yerli mal kullanmak gibi bir şey çalıştırmak mümkün olup olmadığını merak ediyordum.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
Ben bunu yaparken SQL sorgu dizesi bölünmüş olması ile mümkündür ve deyimi iki kez idam fark ama eğer bu tek seferlik bir yaklaşım olup olmadığını merak ediyordum.
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);
CEVAP
Eğer bu kullanma OLANLARI gibi bir şey çalıştırmak mümkün olup olmadığını merak ediyordum.
"SELECT FROM * TABLE;INSERT INTO TABLE;"
Evet mümkündür. İki yol, bildiğim kadarıyla yok. Onlar
1. By setting database connection property to allow multiple queries,
separated by a semi-colon by default.
2. By calling a stored procedure that returns cursors implicit.
Aşağıdaki örnekler yukarıdaki iki olasılık göstermek.
Örnek 1: ( Birden fazla sorgu izin vermek için ):
Bir bağlantı isteği gönderirken, bir bağlantı veritabanı url için allowMultiQueries=true
ekleme özelliği. Bu ek bağlantı özelliği o zaten var bazıları gibi autoReConnect=true
vs. Kabul edilebilir değerler allowMultiQueries
malıdır true
, false
, yes
, ve no
. Başka bir değer SQLException
ile çalışma anında reddetti.
String dbUrl = "jdbc:mysql:///test?allowMultiQueries=true";
Böyle bir talimat geçti sürece, SQLException
atılır.
execute( String sql )
veya diğer türevleri kullanmak sorgu yürütme sonuçları almak için.
boolean hasMoreResultSets = stmt.execute( multiQuerySqlString );
Sokmanın ve aşağıdaki adımları gerektirir sonuçlar süreç:
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
Örnek 2İzleyin : adımları:
- Bir veya daha fazla prosedür oluşturmak* *22
DML
sorgular. - Java
CallableStatement
kullanarak arayın. - Birden fazla
ResultSet
s yordam yürütülen yakalayabilirsiniz.
VİD sonuçlar yakalanabilir mi amaselect
başka bir sorun olabilir
satır tablo nasıl etkilendiğini bulmak için.
Örnek tablo ve prosedürü:
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)
Java Yordam çağrısı:
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
Java sınıf yolu içinde birden fazla ka...
Java Birden Fazla Sınıflar İle Joker K...
Nasıl bir SQL sorgu, birden fazla tabl...
Java: bir dosya içinde Birden fazla sı...
Nasıl " için SQL Server bir işlevi...