### Работа с базами данных с помощью JDBC драйвера

### Что такое JDBC?

JDBC Driver - (Java DataBase Connectivity — соединение с базами данных на Java) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета `java.sql`, входящего в состав Java SE.

### Зачем нужен JDBC?

JDBC - позволяет получать доступ к БД, а также выполнять к ней SQL запросы.

### Шаг 1.

Скачиваем jar файл JDBC драйвера.

MySQL - http://dev.mysql.com/downloads/connector/j/

PostqreSQL - http://jdbc.postgresql.org/download.html

Oracle - http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

### Шаг 2.

##### Подключение к БД Mysql:

    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
    conn.close();

##### Подключение к БД PostgreSQL:

    Class.forName("org.postgresql.Driver");
    Connection connection = DriverManager.getConnection("jdbc:postgresql://hostname:port/dbname", "username", "password");
    connection.close();

##### Подключение к БД Oracle:

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@host:port:DBname","username","password");
    connection.close();

В 1-й строке мы указываем наш JDBC драйвер. Не забудьте добавить его в ClassPath иначе его компилятор его не увидит.
Во 2-й строке JDBC Manager который открывает соединение с базой данных и обеспечит нам дальнейшее обращение к ней.
И последняя строка закрывает соединение с БД.

Желательно строку для определения JDBC поместить в блок try для того чтобы контролировать его наличия в вашем приложении.

    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch(ClassNotFoundException e) {
        System.out.println("Where is your MySQL JDBC Driver?");
        e.printStackTrace();
        return;
    }

### Шаг 3. Создание таблиц в БД.

Вынесем в отдельный метод соединение с БД.

    private static Connection getDBConnection() {
        Connection dbConnection = null;
        try {
            Class.forName(DB_DRIVER);
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        }
        try {
            dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER,DB_PASSWORD);
            return dbConnection;
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return dbConnection;
    }

Этот метод будет создавать в БД таблицу:

    private static void createDbUserTable() throws SQLException {
        Connection dbConnection = null;
        Statement statement = null;

        String createTableSQL = "CREATE TABLE DBUSER("
                + "USER_ID NUMBER(5) NOT NULL, "
                + "USERNAME VARCHAR(20) NOT NULL, "
                + "CREATED_BY VARCHAR(20) NOT NULL, "
                + "CREATED_DATE DATE NOT NULL, " + "PRIMARY KEY (USER_ID) "
                + ")";

        try {
            dbConnection = getDBConnection();
            statement = dbConnection.createStatement();

                    // выполнить SQL запрос
            statement.execute(createTableSQL);
            System.out.println("Table \"dbuser\" is created!");
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            if (statement != null) {
                statement.close();
            }
            if (dbConnection != null) {
                dbConnection.close();
            }
        }
    }

и в main методе вызываем метод createDbTable() который создаст таблицу в БД.

    public static void main(String[] argv) {
        try {
            createDbUserTable();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }

В результате мы должны получить:

    CREATE TABLE DBUSER(
      USER_ID NUMBER(5) NOT NULL,
      USERNAME VARCHAR(20) NOT NULL,
      CREATED_BY VARCHAR(20) NOT NULL,
      CREATED_DATE DATE NOT NULL,
      PRIMARY KEY (USER_ID)
    )
    TABLE "user" IS created!

### Шаг 4. Добавление новой записи в БД.

    String insertTableSQL = "INSERT INTO DBUSER"
                + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) " + "VALUES"
                + "(1,'mkyong','system', " + "to_date('"
                + getCurrentTimeStamp() + "', 'yyyy/mm/dd hh24:mi:ss'))";

метод который будет возвращать текущую дату и время:

    private static String getCurrentTimeStamp() { Date today = new Date(); return dateFormat.format(today.getTime()); }

И выполняем наш SQL запрос который лежит в переменной insertTableSQL

    statement.executeUpdate(insertTableSQL);

### Шаг 5. Получение данных с БД.

    String selectTableSQL = "SELECT USER_ID, USERNAME from DBUSER";

Выполняем запрос:

    try {
        dbConnection = getDBConnection();
        statement = dbConnection.createStatement();

        // выбираем данные с БД
        ResultSet rs = statement.executeQuery(selectTableSQL);

        // И если что то было получено то цикл while сработает
        while (rs.next()) {
            String userid = rs.getString("USER_ID");
            String username = rs.getString("USERNAME");

            System.out.println("userid : " + userid);
            System.out.println("username : " + username);
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

### Шаг 6. Удаление данных с БД.

    String deleteTableSQL = "DELETE DBUSER WHERE USER_ID = 1";

Выполняем запрос на удаление:

    try {
        dbConnection = getDBConnection();
        statement = dbConnection.createStatement();

        // выполняем запрос delete SQL
        statement.execute(deleteTableSQL);
        System.out.println("Record is deleted from DBUSER table!");
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

### Шаг 7. Обновление данных в БД.

    String updateTableSQL = "UPDATE DBUSER SET USERNAME = 'mkyong_new' WHERE USER_ID = 1";

Выполняем запрос на обновление записи:

    try {
        dbConnection = getDBConnection();
        statement = dbConnection.createStatement();

        // выполняем запрос update SQL
        statement.execute(updateTableSQL);

        System.out.println("Record is updated to DBUSER table!");
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

### Выводы.

Все действия с любой базой данных выполняются через SQL запросы, то есть нам достаточно знать SQL для манипуляцией данными в БД.