2017-03-12 7 views
-1

Ich entwickle eine Anwendung, die zu einem Zeitpunkt, mit dem Java-Code die postgres gespeicherte Prozedur aufrufen (die eine Zeichenfolge von JSON zurückgeben).Postgresql JSON-Daten mit JDBC abgeschnitten

create or replace function get_nsx_all() returns text as 
$$ 
begin 
    return array_to_json(array_agg("nguoi.nhaSanXuat")) from "nguoi.nhaSanXuat"; 
end 
$$ 
LANGUAGE 'plpgsql'; 

Die Funktion korrekt ausgeführt und gibt diese in pgAdmin: enter image description here

Allerdings, wenn ich die Funktion über JDBC aufrufen, indem Sie diese mit:

public static void getAllNSX() throws SQLException 
{ 
    connection = DB.getConnection(); 

    CallableStatement statement = connection.prepareCall("{ ? = call get_nsx_all() }"); 

    statement.registerOutParameter(1, Types.VARCHAR); 
    statement.execute(); 

    String x = statement.getString(1); 

    System.out.println(x); 
} 

Ich habe nur dieses:

enter image description here

Ich frage mich, was ich falsch gemacht habe und wie ich die volle JSON-Zeichenfolge zu meiner Anwendung bekommen kann.

Danke!

+3

Das Hauptproblem mit Screenshots ist, dass wir die eigentlichen Charaktere nicht sehen und kopieren/einfügen können, also muss ich fragen: Wie sieht der Space-Look nach "sadfs" aus? Der erste Screenshot zeigt '" sadfs "' (Leerzeichen zwischen 's' und endend' "'), aber wenn das kein echtes Leerzeichen ist (Unicode '\ u0020'), dann kann es etwas sein, das die Anzeige der Zeichenfolge zum Scheitern bringt Haben Sie versucht, die String-Länge zu drucken, zB 'x.length()'? Beachten Sie, wie * all * Ihre Werte dieses nachstehende "Leerzeichen" haben. – Andreas

+0

Zusätzlich können Sie 'SELECT astring :: bytea :: text ', um die Bytes in hex zu bekommen –

+0

Hallo Andreas, danke für deinen Kommentar.Wie du vorgeschlagen hast, füge ich hier den JSON-Code von pgAdmin ein: http://pastebin.com/raw/a1L6K1zy (du kannst die txt-Datei auch hier ansehen auf Dropbox: https://www.dropbox.com/s/q7v4qn9ql31e7vc/data.txt?dl=0) und die Länge, die ich in Intellij tatsächlich 33.600 bekomme. – codingpuss

Antwort

0

Es stellte sich heraus, dass mit Postgresql nichts falsch ist, aber da ich den Datentyp aller Zeichenfolgen auf Zeichen (255) gesetzt habe, was eine Zeichenfolge fester Größe mit 255 Zeichen ist, sind alle nachgestellten Leerzeichen 255 minus Zeichenfolgenlänge .

Danke Laurenz, Andreas für die Eingabe.

Verwandte Themen