SORU
29 Mayıs 2012, Salı


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
29 Mayıs 2012, Salı


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ı:

  1. Bir veya daha fazla prosedür oluşturmak* *22 DML sorgular.
  2. Java CallableStatement kullanarak arayın.
  3. Birden fazla ResultSets yordam yürütülen yakalayabilirsiniz.
    VİD sonuçlar yakalanabilir mi ama select 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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Grace Su

    Grace Su

    6 Ocak 2006
  • Pepsi

    Pepsi

    1 Kasım 2005
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011