[Java JDBC] Spring Boot JDBC

  • 19
  • 0

Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng JdbcTemplateNamedParameterJdbcTemplate trong Spring Boot.

Kỹ thuật được sử dụng:
  • Spring Boot 2.1.2.RELEASE
  • Spring JDBC 5.1.4.RELEASE
  • HikariCP 3.2.0
  • H2 in-memory database 1.4.197
  • Maven 3
  • Java 8

Trong Spring Boot JDBC, cở sở dữ liệu liên quan đến bean như DataSource, JdbcTemplateNamedParameterJdbcTemplate sẽ được cấu hình và tạo khi khởi động project, để sử dụng nó, chỉ cần khai báo @Autowired cho cái bean mà bạn muốn, ví dụ:

Java:
@Autowired
JdbcTemplate jdbcTemplate;

@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
Để kết nối đến cơ sở dữ liệu (ví dụ MySQL), khai báo JDBC...

[Java JDBC] Giới thiệu và transaction

  • 16
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về transaction trong JDBC

JDBC transaction đảm bảo tập hợp các câu lệnh SQL được thực thi là 1 một lần, hoặc tất cả các câu lệnh được chạy thành công, hoặc không (rollback tất cả các thay đổi).

1. Không sử dụng JDBC Transaction
1.1 Ví dụ để thêm 3 dòng mới và cập nhật 1 dòng.

TransactionExample.java
Java:
package com.mkyong.jdbc;

import java.math.BigDecimal;
import java.sql.*;
import java.time.LocalDateTime;

public class TransactionExample {

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             Statement statement = conn.createStatement();
             PreparedStatement psInsert = conn.prepareStatement(SQL_INSERT);
             PreparedStatement psUpdate = conn.prepareStatement(SQL_UPDATE)) {

            statement.execute(SQL_TABLE_DROP)...

[Java JDBC] Gọi Stored Function trong PostgreSQL bằng CallableStatement

  • 14
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách gọi Stored Function trong PostgreSQL bằng CallableStatement

Ví dụ sử dụng JDBC CallableStatement để gọi Stored Function trong cơ sở dữ liệu PostgreSQL.

P.S Đã test với PostgreSQL 11 và Java 8

pom.xml
XML:
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.5</version>
</dependency>
1. Gọi Function
1.1 Tạo 1 store function và gọi nó thông qua JDBC.

FunctionReturnString.java
Java:
package com.mkyong.jdbc.callablestatement;

import java.sql.*;

public class FunctionReturnString {

    public static void main(String[] args) {

        String createFunction = "CREATE OR REPLACE FUNCTION hello(p1 TEXT) RETURNS TEXT "
                + " AS $$ "
                + " BEGIN "
                + " RETURN 'hello ' || p1; "
                + " END; "
                + " $$ "...

[Java JDBC] Gọi Stored Procedure có tham số CURSOR với CallableStatement

  • 12
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách gọi Stored Procedure có tham số CURSOR với CallableStatement trong Java

Ví dụ sử dụng JDBC CallableStatement để gọi Stored Procedure trả về con trỏ.

Đã test với Java 8 và Oracle database 19c

pom.xml
XML:
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>8</version>
    <scope>system</scope>
    <systemPath>path.to/ojdbc8.jar</systemPath>
</dependency>
1. JDBC CallableStatement
1.1 PL/SQL stored procedure trả về cursor.

SQL:
CREATE OR REPLACE PROCEDURE get_employee_by_name(
   p_name IN EMPLOYEE.NAME%TYPE,
   o_c_dbuser OUT SYS_REFCURSOR)
    AS
    BEGIN

      OPEN o_c_dbuser FOR
      SELECT * FROM EMPLOYEE WHERE NAME LIKE p_name || '%';

    END;
1.2 Sử dụng JDBC để gọi stored procedure trên.

StoreProcedureCursor.java
Java:
package com.mkyong.jdbc.callablestatement...

[Java JDBC] Gọi Stored Procedure có OUT parameter với CallableStatement

  • 16
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách gọi Stored Procedure có OUT parameter với CallableStatement trong Java

Ví dụ sử dụng JDBC CallableStatement để gọi Stored Procedure có cả tham số IN và OUT.

Đã test với Java 8 và Oracle database 19c

pom.xml
XML:
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>8</version>
    <scope>system</scope>
    <systemPath>path.to/ojdbc8.jar</systemPath>
</dependency>
1. JDBC CallableStatement
1.1 PL/SQL stored procedure có cả tham số IN và OUT.

SQL:
CREATE OR REPLACE PROCEDURE get_employee_by_id(
   p_id IN EMPLOYEE.ID%TYPE,
       o_name OUT EMPLOYEE.NAME%TYPE,
   o_salary OUT EMPLOYEE.SALARY%TYPE,
   o_date OUT EMPLOYEE.CREATED_DATE%TYPE)
    AS
    BEGIN

    SELECT NAME , SALARY, CREATED_DATE INTO o_name, o_salary, o_date from EMPLOYEE WHERE ID = p_id;

    END;
1.2 Sử dụng JDBC để gọi...

[Java JDBC] Sử dụng CallableStatement để gọi Stored Procedure có IN parameter

  • 18
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng CallableStatement để gọi Stored Procedure có IN parameter

Đã test với Java 8 và Oracle database 19c

pom.xml
XML:
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>8</version>
    <scope>system</scope>
    <systemPath>path.to/ojdbc8.jar</systemPath>
</dependency>
1. JDBC CallableStatement
1.1 PL/SQL stored procedure để insert một dòng mới.

SQL:
CREATE OR REPLACE PROCEDURE insert_employee(
   p_name IN EMPLOYEE.NAME%TYPE,
   p_salary IN EMPLOYEE.SALARY%TYPE,
   p_date IN EMPLOYEE.CREATED_DATE%TYPE)
    AS
    BEGIN

      INSERT INTO EMPLOYEE ("NAME", "SALARY", "CREATED_DATE") VALUES (p_name, p_salary, p_date);

      COMMIT;

    END;
1.2 Sử dụng JDBC để gọi stored procedure ở trên.

StoreProcedureInParameter.java
Java:
package com.mkyong.jdbc.callablestatement;

import...

[Java JDBC] Sử dụng điều kiện IN với PreparedStatement

  • 18
  • 0
Ví dụ sử dụng JDBC PreparedStatement để chạy lệnh SQL với điều kiện IN

1. PreparedStatement + Array
Trong JDBC, có thể sử dụng createArrayOf để tạo 1 PreparedStatement IN query.

Java:
@Override
    public List<Integer> getPostIdByTagId(List<Integer> tagIds) {

        List<Integer> result = new ArrayList<>();

        String sql = "SELECT tr.object_id as post_id FROM wp_term_relationships tr " +
                " JOIN wp_term_taxonomy tt JOIN wp_terms t " +
                " ON tr.term_taxonomy_id = tt.term_taxonomy_id " +
                " AND tt.term_id = t.term_id " +
                " WHERE t.term_id IN (?) AND tt.taxonomy= 'post_tag'";

        try (Connection connection = dataSource.getConnection();
             PreparedStatement ps = connection.prepareStatement(sql)) {

            Array tagIdsInArray = connection.createArrayOf("integer"...

[Java JDBC] Tạo Batch update với PreparedStatement

  • 16
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách tạo Batch update (gửi nhiều lệnh create, insert, update vào databaase) với PreparedStatement trong Java

BatchUpdate.java
Java:
package com.mkyong.jdbc.preparestatement;

import java.math.BigDecimal;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.Arrays;

public class BatchUpdate {

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             PreparedStatement psDDL = conn.prepareStatement(SQL_CREATE);
             PreparedStatement psInsert = conn.prepareStatement(SQL_INSERT);
             PreparedStatement psUpdate = conn.prepareStatement(SQL_UPDATE)) {

            // commit all or rollback all, if any errors
            conn.setAutoCommit(false); // default true

            psDDL.execute();

            // Run list...

[Java JDBC] Select list các dòng trong bảng với PreparedStatement

  • 17
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng PreparedStatement để select ra nhiều dòng trong bảng

RowSelect.java
Java:
package com.mkyong.jdbc.preparestatement.row;

import com.mkyong.jdbc.model.Employee;

import java.math.BigDecimal;
import java.sql.*;

public class RowSelect {

    private static final String SQL_SELECT = "SELECT * FROM EMPLOYEE";

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             PreparedStatement preparedStatement = conn.prepareStatement(SQL_SELECT)) {

            ResultSet resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {

                long id = resultSet.getLong("ID");
                String name = resultSet.getString("NAME");
                BigDecimal salary = resultSet.getBigDecimal("SALARY")...

[Java JDBC] Xóa 1 dòng trong bảng với PreparedStatement

  • 15
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng PreparedStatement để xóa 1 dòng trong bảng

RowDelete.java
Java:
package com.mkyong.jdbc.preparestatement.row;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class RowDelete {

    private static final String SQL_DELETE = "DELETE FROM EMPLOYEE WHERE NAME=?";

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             PreparedStatement preparedStatement = conn.prepareStatement(SQL_DELETE)) {

            preparedStatement.setString(1, "mkyong");

            int row = preparedStatement.executeUpdate();

            // rows affected
            System.out.println(row);

        } catch (SQLException e) {
            System.err.format("SQL State...

[Java JDBC] Sử dụng PreparedStatement để cập nhật dòng trong bảng

  • 22
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng JDBC PreparedStatement để cập nhật 1 dòng trong bảng

RowUpdate.java
Java:
package com.mkyong.jdbc.preparestatement.row;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class RowUpdate {

    private static final String SQL_UPDATE = "UPDATE EMPLOYEE SET SALARY=? WHERE NAME=?";

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             PreparedStatement preparedStatement = conn.prepareStatement(SQL_UPDATE)) {

            preparedStatement.setBigDecimal(1, new BigDecimal(999.99));
            preparedStatement.setString(2, "mkyong");

            int row = preparedStatement.executeUpdate();

            // rows affected...

[Java JDBC] Thêm dòng mới vào bảng với JDBC PreparedStatement

  • 18
  • 0
Ví dụ về sử dụng JDBC PreparedStatement để thêm một dòng vào bảng trong cơ sở dữ liệu.

RowInsert.java
Java:
package com.mkyong.jdbc.preparestatement.row;

import java.math.BigDecimal;
import java.sql.*;
import java.time.LocalDateTime;

public class RowInsert {

    private static final String SQL_INSERT = "INSERT INTO EMPLOYEE (NAME, SALARY, CREATED_DATE) VALUES (?,?,?)";

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             PreparedStatement preparedStatement = conn.prepareStatement(SQL_INSERT)) {

            preparedStatement.setString(1, "mkyong");
            preparedStatement.setBigDecimal(2, new BigDecimal(799.88));
            preparedStatement.setTimestamp(3, Timestamp.valueOf(LocalDateTime.now()));

            int row = preparedStatement.executeUpdate();

            // rows affected...

[Java JDBC] Sử dụng PreparedStatement để tạo bảng

  • 18
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng PreparedStatement để tạo bảng trong Java

Sử dụng JDBC PreparedStatement để tạo bảng tại cơ sở dữ liệu.

SQL:
CREATE TABLE EMPLOYEE
(
    ID serial,
    NAME varchar(100) NOT NULL,
    SALARY numeric(15, 2) NOT NULL,
    CREATED_DATE timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
    PRIMARY KEY (ID)
);
TableCreate.java
Java:
package com.mkyong.jdbc.preparestatement.table;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TableCreate {

    private static final String SQL_CREATE = "CREATE TABLE EMPLOYEE"
            + "("
            + " ID serial,"
            + " NAME varchar(100) NOT NULL,"
            + " SALARY numeric(15, 2) NOT NULL,"
            + " CREATED_DATE timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,"
            + " PRIMARY KEY...

[Java JDBC] Tạo Batch update với JDBC Statement

  • 34
  • 0
Sử dụng JDBC Statement để gửi một loạt các câu lệnh SQL (drop,create,insert, update) vào cơ sở dữ liệu.

BatchUpdate.java
Java:
package com.mkyong.jdbc.statement;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.util.Arrays;

public class BatchUpdate {

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             Statement statement = conn.createStatement()) {

            // optional, for transaction
            // commit all or rollback all, if any errors
            conn.setAutoCommit(false);

            // add list of SQL commands and run as a batch

            // drop table
            statement.addBatch(SQL_DROP);

            // create table
            statement.addBatch(SQL_CREATE)...

[Java JDBC] Sử dụng JDBC Statement để get ra list các dòng trong bảng

  • 16
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng JDBC Statement để get ra list các dòng trong bảng

RowSelect.java
Java:
package com.mkyong.jdbc.statement.row;

import com.mkyong.jdbc.model.Employee;

import java.math.BigDecimal;
import java.sql.*;

public class RowSelect {

    public static void main(String[] args) {

        String sql = "SELECT * FROM EMPLOYEE";

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             Statement statement = conn.createStatement()) {

            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {

                long id = resultSet.getLong("ID");
                String name = resultSet.getString("NAME");
                BigDecimal salary = resultSet.getBigDecimal("SALARY");
                Timestamp createdDate = resultSet.getTimestamp("CREATED_DATE");

                Employee...

[Java JDBC] Xóa 1 dòng trong bảng với JDBC Statement

  • 19
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách xóa 1 dòng trong bảng với JDBC Statement

Ví dụ JDBC Statement để xóa một dòng.

RowDelete.java
Java:
package com.mkyong.jdbc.statement.row;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class RowDelete {

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             Statement statement = conn.createStatement()) {

            int row = statement.executeUpdate(deleteByName("mkyong"));

            // rows affected
            System.out.println(row);

        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private static String deleteByName(String...

[Java JDBC] Update dòng với JDBC Statement

  • 19
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách update dòng với JDBC Statement trong Java

Ví dụ dùng JDBC Statement để cập nhật một dòng.

RowUpdate.java
Java:
package com.mkyong.jdbc.statement.row;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class RowUpdate {

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             Statement statement = conn.createStatement()) {

            int row = statement.executeUpdate(updateSalaryByName("mkyong", new BigDecimal(1080)));

            // rows affected
            System.out.println(row);

        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
        } catch (Exception e) {...

[Java JDBC] Thêm (insert) dòng bằng JDBC Statement

  • 17
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách thêm dòng bằng JDBC Statement

Ví dụ sử dụng JDBC Statement để thêm 1 dòng vào bảng trong cơ sở dữ liệu.

RowInsert.java
Java:
package com.mkyong.jdbc.statement.row;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;

public class RowInsert {

    public static void main(String[] args) {

        // auto close connection and statement
        try (Connection conn = DriverManager.getConnection(
                "jdbc:postgresql://127.0.0.1:5432/test", "postgres", "password");
             Statement statement = conn.createStatement()) {

            int row = statement.executeUpdate(generateInsert("mkyong", new BigDecimal(999.80)));

            // rows affected
            System.out.println(row);

        } catch (SQLException e) {
            System.err.format("SQL State: %s\n%s"...

[Java JDBC] Sử dụng JDBC Statement để tạo table

  • 21
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách sử dụng JDBC Statement để tạo table

Ví dụ sử dụng JDBC Statement để tạo table trong cơ sở dữ liệu SQL.

SQL:
CREATE TABLE EMPLOYEE
(
    ID serial,
    NAME varchar(100) NOT NULL,
    SALARY numeric(15, 2) NOT NULL,
    CREATED_DATE timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
    PRIMARY KEY (ID)
);
TableCreate.java
Java:
package com.mkyong.jdbc.statement.table;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class TableCreate {

    private static final String SQL_CREATE = "CREATE TABLE EMPLOYEE"
            + "("
            + " ID serial,"
            + " NAME varchar(100) NOT NULL,"
            + " SALARY numeric(15, 2) NOT NULL,"
            + " CREATED_DATE timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,"
            + " PRIMARY KEY (ID)"
            + ")";

    public static void...

[Java JDBC] Kết nối đến database PostgreSQL với JDBC

  • 15
  • 0
Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách kết nối đến database PostgreSQL với JDBC trong Java

Ví dụ sử dụng JDBC để kết nối cơ sở dữ liệu PostgreSQL.

Đã test với:
  • Java 8
  • PostgreSQL 11
  • PostgreSQL JDBC driver 42.2.12

1. Download PostgreSQL JDBC Driver
Try cập đến http://jdbc.postgresql.org/download.html để tải PostgreSQL JDBC Driver mới nhất.

postgresql driver

2. JDBC Connection
2.1 Tạo kết nối với cơ sở dữ liệu PostgreSQL.

JDBCExample.java
Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCExample {

    public static void main(String[] args) {

        // https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html#package.description
        // auto java.sql.Driver discovery -- no...