2013-02-18 19 views
17

Ich frage die information_schema.columns Tabelle in meiner PostgreSQL-Datenbank ab. Unter Verwendung eines Tabellennamens findet die Ergebnismenge alle Spaltennamen, den Typ und ob sie Nullwerte enthalten kann (außer für den Primärschlüssel, 'id'). Dies ist die Abfrage verwendet wird:Konvertieren eines Resultsets von SQL Array in Array von Strings

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; 

Ich habe einen String-Array für jede dieser Ergebnisse und ich versuche, die ResultSet-Methode zu verwenden getArray(String columnLabel) Looping durch die Ergebnisse zu vermeiden. Ich mag die zurückgegebenen Arrays in dem String-Arrays speichern, aber einen Typenkonfliktfehler

Type mismatch: cannot convert from Array to String[] 

Ist bekomme es eine Möglichkeit, das SQL-Array-Objekt in einen String [] zu konvertieren oder typisieren?

Relevant Code:

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(); 
} 

Antwort

30

Verwendung:

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

Wie erläutert here

Array SQL-Typ ist, um ein Objekt zu getArray() Java-Array werfen zurückgibt.

+1

Danke, ich hatte versucht mit 'rs.getArray (" is_nullable "). GetArray()' aber ich glaube nicht, dass ich es typecast hatte. Dies scheint mein Problem gelöst zu haben. – Matt

3

das Array Verallgemeinern

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

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

Objekt, um es Schleife als Zeichenfolge verwenden:

type[i].toString(); 
+0

Diese noch einen Fehler verursacht. "_Type Mismatch: kann nicht von Array zu Object [] _" konvertieren. Ich denke, das Hauptproblem ist, dass die ResultSet 'getArray' Methode ein [java.sql Array] (http://docs.oracle.com/javase/7/docs/api/java/sql/Array.html) zurückgibt, nicht der Typ java.util.Arrays unter der Objektklasse java.lang Object. Hier ist die [Javadoc] (http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getArray (java.lang.String)) für die Methode, die ich bin verwenden. – Matt

+0

@Matt bearbeitet und verifiziert, GetArray() wird Array zurückgeben, und Array.getArray() gibt Java-Array zurück. – TheWhiteRabbit

+0

Richtig, das würde jetzt funktionieren, aber es erfordert die unnötige Verwendung von toString() '. In einem Fall, in dem unbekannte oder eine Vielzahl von Objekten in dem ResultSet enthalten sind, kann eine Verallgemeinerung zu Object [] nützlicher sein. In meinem Fall brauche ich nur Strings. – Matt

0

Wie eine Arraylist-Eigenschaft aus einem SQL-Array setzen:

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

Was ist das "o" in Zeile 3? – DerMike

+1

o ist eine Instanz eines Objekts mit einer Eigenschaft listProperty vom Typ List yglodt

Verwandte Themen