Страницы

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

Работа с PostgreSQL в Java

Создаем базу данных в PostgreSQL

Создаем новый проект в IDEA (в примере версия 14)





Скачиваем последнюю версию JDBC драйвера с репозитория https://jdbc.postgresql.org/download.html 
Добавляем ее в библиотеки

Ну и собственно полный код примера, - вставляем в основной класс и добавляем его вызов в main.

    public static void TestDatabase() {

        Connection c;
        Statement stmt;

        try {
            Class.forName("org.postgresql.Driver");
            c = DriverManager
                    .getConnection("jdbc:postgresql://localhost:5432/testbase","postgres", "password");
            c.setAutoCommit(false);
            System.out.println("-- Opened database successfully");
            String sql;

            //-------------- CREATE TABLE ---------------
            stmt = c.createStatement();
            sql = "CREATE TABLE COMPANY " +
                    "(ID INT PRIMARY KEY     NOT NULL," +
                    " NAME           TEXT    NOT NULL, " +
                    " AGE            INT     NOT NULL, " +
                    " ADDRESS        VARCHAR(50), " +
                    " SALARY         REAL)";
            stmt.executeUpdate(sql);
            stmt.close();
            c.commit();
            System.out.println("-- Table created successfully");

            //--------------- INSERT ROWS ---------------
            stmt = c.createStatement();
            sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );";
            stmt.executeUpdate(sql);

            sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 );";
            stmt.executeUpdate(sql);

            sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );";
            stmt.executeUpdate(sql);

            sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";
            stmt.executeUpdate(sql);

            stmt.close();
            c.commit();
            System.out.println("-- Records created successfully");


            //-------------- UPDATE DATA ------------------
            stmt = c.createStatement();
            sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;";
            stmt.executeUpdate(sql);
            c.commit();
            stmt.close();

            System.out.println("-- Operation UPDATE done successfully");


            //--------------- SELECT DATA ------------------
            stmt = c.createStatement();
            ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
            while ( rs.next() ) {
                int id = rs.getInt("id");
                String  name = rs.getString("name");
                int age  = rs.getInt("age");
                String  address = rs.getString("address");
                float salary = rs.getFloat("salary");
                System.out.println(String.format("ID=%s NAME=%s AGE=%s ADDRESS=%s SALARY=%s",id,name,age,address,salary));
            }
            rs.close();
            stmt.close();
            c.commit();
            System.out.println("-- Operation SELECT done successfully");


            //-------------- DELETE DATA ----------------------
            stmt = c.createStatement();
            sql = "DELETE from COMPANY where ID=2;";
            stmt.executeUpdate(sql);
            c.commit();
            stmt.close();
            System.out.println("-- Operation DELETE 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");

    }

компилируем, запускаем, в окне вывода видим примерно следующее

-- Opened database successfully
-- Table created successfully
-- Records created successfully
-- Operation UPDATE done successfully
ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0
ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0
ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond  SALARY=65000.0
ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=25000.0
-- Operation SELECT done successfully
-- Operation DELETE done successfully
-- All Operations done successfully

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

2 комментария:

  1. Спасибо, помогло быстро разобраться.
    Правда, строчку "Class.forName("org.postgresql.Driver");" можно было не писать.

    ОтветитьУдалить
    Ответы
    1. Нет все-таки лучше писать, так как это сейчас зависит от настроек виртуальной машины. Вот фрагмент коммента из обсуждения: "В эти дни присутствуют волшебные крючки, позволяющие JVM автоматически обнаруживать драйверы (если они достаточно новые), поэтому вызов лишний, но по привычке многие все еще используют его."

      Удалить