Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Beberapa kueri dieksekusi di java dalam satu pernyataan

Saya ingin tahu apakah mungkin untuk mengeksekusi sesuatu seperti ini menggunakan JDBC.

"SELECT FROM * TABLE;INSERT INTO TABLE;"

Ya itu mungkin. Ada dua cara, sejauh yang saya tahu. Mereka adalah

  1. Dengan menyetel properti koneksi database untuk mengizinkan beberapa kueri, secara default dipisahkan dengan titik koma.
  2. Dengan memanggil prosedur tersimpan yang mengembalikan kursor secara implisit.

Contoh berikut menunjukkan dua kemungkinan di atas.

Contoh 1 :( Untuk mengizinkan beberapa kueri ):

Saat mengirim permintaan koneksi, Anda perlu menambahkan properti koneksi allowMultiQueries=true ke url basis data. Ini adalah properti koneksi tambahan jika sudah ada, seperti autoReConnect=true , dll.. Nilai yang dapat diterima untuk allowMultiQueries properti adalah true , false , yes , dan no . Nilai lain apa pun ditolak saat runtime dengan SQLException .

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

Kecuali instruksi tersebut diteruskan, sebuah SQLException dilempar.

Anda harus menggunakan execute( String sql ) atau varian lainnya untuk mengambil hasil eksekusi kueri.

boolean hasMoreResultSets = stmt.execute( multiQuerySqlString );

Untuk mengulangi dan memproses hasil, Anda memerlukan langkah-langkah berikut:

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

Contoh 2 :Langkah-langkah yang harus diikuti:

  1. Buat prosedur dengan satu atau lebih select , dan DML pertanyaan.
  2. Panggil dari java menggunakan CallableStatement .
  3. Anda dapat menangkap beberapa ResultSet s dieksekusi dalam prosedur.
    Hasil DML tidak dapat diambil tetapi dapat mengeluarkan select lain
    untuk mengetahui bagaimana pengaruh baris pada tabel.

Contoh tabel dan prosedur :

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)

Prosedur Panggilan dari 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi MySQL ACOS() – Mengembalikan Arc Cosinus dari Angka

  2. Menggunakan Python dan MySQL dalam Proses ETL:SQLAlchemy

  3. Pilih Database MySQL di Linux melalui Command Line

  4. Instal Web Server di Windows XP dengan Apache2, PHP5 dan MySQL4 – Bagian 4

  5. Apa yang Baru Dengan Replikasi MySQL di MySQL 8.0