STACKJAVA

Hướng dẫn Java JDBC, Ví dụ với CallableStatement trong JDBC

Hướng dẫn Java JDBC, Ví dụ với CallableStatement trong JDBC

CallableStatement

Ví dụ với CallableStatement trong JDBC.

Tạo cơ sở dữ liệu demo-jdbc như hình dưới:

CREATE SCHEMA `demo-jdbc` ;

(Xem lại: Cài đặt và cấu hình MySQL)

Bây giờ mình sẽ viết 1 chương trình Java kết nối tới database demo-jdbc

Vì CallableStatement được thừa kế từ PreparedStatement nên các lệnh INSERT, UPDATE, DELETE, SELECT giống hệ với PreparedStatement, mình chủ yếu tập trung vào tạo và gọi stored procedures.

 

Để kết nối với MySQL bằng Java chúng ta cần download jdbc tương ứng cho MySQL

Các bạn có thể download thư viện jdbc cho MySQL tại đây mysql-connector-java-6.0.6.jar

Hoặc sử dụng maven:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

Ở đây mình dùng maven (nếu bạn nào chưa biết maven thì nên tìm hiểu luôn vì nó được dùng nhiều và khá quan trọng khi đi làm)

Tạo table user_info

package stackjava.com.demojdbc.callablestatement;

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

public class CreateTable {
  public static void main(String[] args) throws SQLException, ClassNotFoundException {
    Class.forName("com.mysql.cj.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo-jdbc", "root", "admin1234");
    String sql = "CREATE TABLE user_info (" +
        "  id int(11) NOT NULL AUTO_INCREMENT," +
        "  name varchar(45) DEFAULT NULL," +
        "  address varchar(255) DEFAULT NULL," +
        "  PRIMARY KEY (id)" +
        ")";
    CallableStatement cs = con.prepareCall(sql);
    cs.execute();
    con.close();
    System.out.println("Table is Created!");
  }
}

Insert bản ghi vào table user_info

package stackjava.com.demojdbc.callablestatement;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import stackjava.com.demojdbc.entities.User;

public class InsertRow {
  public static void main(String[] args) throws SQLException, ClassNotFoundException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo-jdbc", "root", "admin1234");
    
    String sql = "INSERT INTO user_info (name, address) VALUES (?, ?);";
    List<User> listUser = new ArrayList<User>();
    listUser.add(new User("Harry", "England"));
    listUser.add(new User("Batman", "USA"));

    CallableStatement cs = con.prepareCall(sql);
    for (User user : listUser) {
      cs.setString(1, user.getName());
      cs.setString(2, user.getAddress());
      cs.execute();
    }
    con.close();
    System.out.println("Inserted!");
  }
}

Tạo stored procedures:

package stackjava.com.demojdbc.callablestatement;

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

public class CreateStoredProcedures {
  public static void main(String[] args) throws SQLException, ClassNotFoundException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo-jdbc", "root", "admin1234");
    String sql ="CREATE PROCEDURE getUserById(IN idUser int)" +
          "BEGIN" +
          " SELECT * FROM user_info WHERE id = idUser;" +
          "END";
    CallableStatement cs = con.prepareCall(sql);
    cs.execute();
    con.close();
    System.out.println("Created Stored Procedures!");
  }
}

Kết quả sau khi chạy lần lượt 3 class trên:

Thực hiện gọi stored procedures, truyền id = 1 và lấy về kết quả:

package stackjava.com.demojdbc.callablestatement;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class CallStoredProcedures {
  public static void main(String[] args) throws SQLException, ClassNotFoundException {
    System.out.println("Call Stored Procedures: ");
    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo-jdbc", "root", "admin1234");
    String sql = "CALL getUserById(?);";
    CallableStatement cs = con.prepareCall(sql);
    cs.setInt(1, 1);
    cs.executeQuery();
    ResultSet rs = cs.getResultSet();
    while (rs.next()) {
      System.out.println(rs.getInt(1) + "  " + rs.getString(2) + "  " + rs.getString(3));
    }
    con.close();
  }
}

Kết quả:

Hướng dẫn Java JDBC, Ví dụ với CallableStatement trong JDBC

Okay, Done!

Download code ví dụ trên tại đây

Xem thêm:

Truy vấn database với jdbc – StatementStatement

Truy vấn database với jdbc – PreparedStatement