суббота, 7 февраля 2015 г.

Работа с JSON типом данных в PosgreSQL

Как оказалось, все довольно просто - без лишних слов привожу пример кода


public static void main(String[] args) {
        
        try {
            TestJson();
        } catch (SQLException e) {
            System.out.println("-- Error");
            e.printStackTrace();
        }
    }


    public static void TestJson() throws SQLException {

        Connection c;
        Statement stmt;

        try {

            try {
                Class.forName("org.postgresql.Driver");
            } catch (ClassNotFoundException e) {
               System.out.println("А где ваш PostgreSQL JDBC драйвер? Включите в ваш library path!");
                return;
            }

            c = DriverManager
                    .getConnection("jdbc:postgresql://localhost:5432/testdatabase", "postgres", "password");
            c.setAutoCommit(false);
            System.out.println("-- Opened database successfully");
            String sql;


            //-------------- CREATE TABLE ---------------
            stmt = c.createStatement();
            sql = "CREATE  TABLE SAMPLE (ID INT PRIMARY KEY NOT NULL, DATA JSON)";
            stmt.executeUpdate(sql);
            stmt.close();
            System.out.println("-- Table created successfully");


            //--------------- INSERT ROW with JSON v1 ------------------
            stmt = c.createStatement();
            sql = "INSERT INTO SAMPLE (ID,DATA) VALUES (1, '{\"username\":\"alena\",\"post\":1024,\"email\":\"butakova.alena@gmail.com\" , \"blocked\":true  }' );";
            stmt.executeUpdate(sql);


            //--------------- INSERT ROW with JSON v2 ------------------
            int id = 2;
            String jsonString = "{\"username\":\"igor\",\"posts\":2048,\"email\":\"igor.butakov@gmail.com\"}";

            PGobject jsonObject = new PGobject();
            jsonObject.setType("json");
            jsonObject.setValue(jsonString);

            PreparedStatement pstmt = c.prepareStatement("insert into sample (id, data) values (?, ?)");
            pstmt.setInt(1, id);
            pstmt.setObject(2, jsonObject);
            pstmt.executeUpdate();
            pstmt.close();
            c.commit();

            //--------------- SELECT DATA ------------------
            //http://www.postgresql.org/docs/9.3/static/functions-json.html
            //http://www.postgresql.org/docs/9.4/static/functions-json.html
            stmt = c.createStatement();
            ResultSet rs = stmt.executeQuery( "SELECT id, DATA, DATA::json->>'username' AS name FROM SAMPLE  where DATA::json->>'blocked'='true' ;" );
            while ( rs.next() ) {
                int objectid = rs.getInt("id");
                String obj = rs.getString("data");
                String name = rs.getString("name");
                System.out.println(String.format("ID=%s, DATA=%s, NAME=%s",objectid,obj, name));
            }
            rs.close();
            stmt.close();
            System.out.println("-- Operation SELECT done successfully");

            c.close();

        } catch (Exception e) {
            e.printStackTrace();
            System.err.println(e.getClass().getName()+": "+e.getMessage());
            System.exit(0);
        }
        System.out.println("-- All Operations done successfully");

    }

соответственно после запуска будет выведено


и в базе данных появится табличка с данными


Комментариев нет:

Отправить комментарий