Acest articol se adreseaza celor care utilizeaza limbajul de programare Java pentru a obtine, prelucra , stoca date intr-o baza de date de tip Microsoft SQL Server prin intermediul JDBC utilizand ca driver de baza de date mssql-jdbc-7.2.2.
M-am hotarat sa scriu acest articol dupa ce m-am lovit de aceeasi problema de doua ori la intervale de timp diferite. Ma intereseaza sa creez o structura de tip array, String[][] pentru implementarea unei matrici ( tabel ) cu datele returnate de catre interogarea SQL de tip SELECT . Avand in vedere ca in Java trebuie sa cunosc dimensiunile array-ului dublu pentru a-l instantia, respectiv numarul de coloane ( il cunosc de cand realizez interogarea SQL) si numarul de randuri returnate de respectiva interogare SQ:L aparent am la dispozitie doua metode pentru a realiza acest lucru.
Prima metoda care se preteaza pentru orice baza de date este sa creez doua interogari diferite, prima sa-mi returneze numarul de randuri si a doua interogare care sa-mi puna la dispozitie datele propriu-zise. Aceasta metoda este foarte defectuoasa deoarece , din cauza accesului concurential la un server de baze de date, exista possibilitatea ca numarul de randuri sa se modifice intre cele doua interogari ceea ce va conduce la aparitia unei erori de tipul "stack overflow" in concluzie aceasta metoda este contraproductiva.
A doua metoda, cea pe care o folosesc, este :
PreparedStatement pstc=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
int nrR=0;
ResultSet rsNr=pstc.executeQuery();
rsNr.last();
nrR=rsNr.getRow();
rsNr.beforeFirst();
unde nrR este numarul de randuri returnate de respectiva interogare SQL.