2013-02-18 24 views
17

Pytam tabelę information_schema.columns w mojej bazie danych PostgreSQL. Używając nazwy tabeli, zestaw wyników znajduje wszystkie nazwy kolumn, typ i czy jest on zerowy (z wyjątkiem klucza podstawowego, "id"). To zapytanie używany:Konwertuj zestaw wyników z tablicy SQL na tablicę ciągów znaków

SELECT column_name, is_nullable,data_type FROM information_schema.columns 
WHERE lower(table_name) = lower('TABLE1') AND column_name != 'id' 
ORDER BY ordinal_position; 

Mam tablicę ciągów dla każdego z tych wyników i staram się użyć metody ResultSet getArray(String columnLabel) aby uniknąć pętli przez wynikach. Chcę, aby przechowywać zwróconych tablic w tablicach smyczkowych, ale pojawia się błąd niezgodność typów

Type mismatch: cannot convert from Array to String[] 

Czy istnieje sposób do konwersji lub typecast tablicy obiektu SQL String []?

odpowiedni kod:

String[] columnName, type, nullable; 

//Get Field Names, Type, & Nullability 
String query = "SELECT column_name, is_nullable,data_type FROM information_schema.columns " 
     + "WHERE lower(table_name) = lower('"+tableName+"') AND column_name != 'id' " 
     + "ORDER BY ordinal_position"; 

try{ 
    ResultSet rs = Query.executeQueryWithRS(c, query); 
    columnName = rs.getArray(rs.getArray("column_name")); 
    type = rs.getArray("data_type"); 
    nullable = rs.getArray("is_nullable"); 
}catch (Exception e) { 
    e.printStackTrace(); 
} 

Odpowiedz

30

Zastosowanie:

Array a = rs.getArray("is_nullable"); 
String[] nullable = (String[])a.getArray(); 

Jak wyjaśniono here

Array jest typu SQL getArray() zwraca obiekt rzutowania na tablicy Java.

+1

Dziękuję, próbowałem używać 'rs.getArray (" is_nullable "). GetArray()' ale nie sądzę, miałem typecast to. Wygląda na to, że rozwiązałem mój problem. – Matt

3

uogólnić Array obiektu

Object[] type; //this is generic can use String[] directly 
    Array rsArray; 

    rsArray = rs.getArray("data_type"); 
    type = (Object [])rsArray.getArray(); 

pomocą pętli, jak to wyrażenie:

type[i].toString(); 
+0

to nadal powoduje błąd. "Niedopasowanie typu: nie można przekształcić z Array w Object [] _". Myślę, że głównym problemem jest to, że metoda ResultSet 'getArray' zwraca tablicę [java.sql Array] (http://docs.oracle.com/javase/7/docs/api/java/sql/Array.html), nie typ java.util.Arrays w klasie Obiekt java.lang. Oto [javadoc] (http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getArray (java.lang.String)) na temat metody jestem za pomocą. – Matt

+0

@Matt edytowany i sprawdzany, getArray() zwróci tablicę, a Array.getArray() zwróci tablicę java. – TheWhiteRabbit

+0

Prawidłowo, to by teraz działało, ale wymaga niepotrzebnego użycia 'toString()'. W przypadku, gdy nieznane lub różnorodne obiekty są zawarte w ResultSet, generalizacja do Object [] może być bardziej przydatna. W moim przypadku potrzebuję tylko Strings. – Matt

0

Jak ustawić właściwość ArrayList z tablicy SQL:

Array a = rs.getArray("col"); // smallint[] column 
if (a != null) { 
    yourObject.setListProperty(Arrays.asList((Integer[]) a.getArray())); 
} 
+0

Co to jest 'o' w linii 3? – DerMike

+1

o jest instancją obiektu z listą właściwości Właściwość typu Lista yglodt

Powiązane problemy