Hướng dẫn jdbc mysql tutorial - hướng dẫn jdbc mysql



Để kết nối Java với MySQL bằng JDBC, giả sử bạn đã tạo bảng trong MySQL, bạn cần làm theo 4 bước sau: kết nối Java với MySQL bằng JDBC, giả sử bạn đã tạo bảng trong MySQL, bạn cần làm theo 4 bước sau:

  1. Tải file mysql-connector-java-x.y.zz.zip về máy tại https://dev.mysql.com/downloads/connector/j/, giải nén ra được file mysql-connector-java-x.y.zz-bin.jar. mysql-connector-java-x.y.zz.zip về máy tại https://dev.mysql.com/downloads/connector/j/, giải nén ra được file mysql-connector-java-x.y.zz-bin.jar.
  2. Add thư viện JDBC Driver mysql-connector-java-x.y.zz-bin.jar vào project. mysql-connector-java-x.y.zz-bin.jar vào project.
  3. Gọi phương thức Class.forName("com.mysql.jdbc.Driver"). forName("com.mysql.jdbc.Driver").
  4. Gọi phương thức DriverManager.getConnection() để kết nối đến cơ sở dữ liệu MySQL. getConnection() để kết nối đến cơ sở dữ liệu MySQL.

Chi tiết về việc kết nối ứng dụng Java với cơ sở dữ liệu MySQL bằng JDBC được thể hiển trong ví dụ dưới đây.


Tạo bảng 'student' trong cơ sở dữ liệu có tên 'testdb' trong MySQL với câu lệnh như sau:

CREATE TABLE student (
   id   INT              NOT NULL,
   name VARCHAR (32)     NOT NULL,
   address  VARCHAR (32) NOT NULL,
   PRIMARY KEY (id)
);

Insert vài dòng dữ liệu cho bảng 'student'

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")

Sau khi thực thi các câu lệnh trên chúng ta có được dữ liệu như sau:

Hướng dẫn jdbc mysql tutorial - hướng dẫn jdbc mysql

Tạo chương trình để kết nối và hiển thị dữ liệu của bảng 'student' ra màn hình như sau:

File: ConnectMysqlExample.java

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}

Kết quả:

connect successfully!
1  Công  Hanoi
2  Dung  Vinhphuc
3  Ngôn  Danang
4  Hạnh  Hanoi

Tham khảo bài học: Cài đặt MySQL



Mục lục

Nội dung chính

  • Mục lục
  • Nội dung chính
  • 1- Database sử dụng trong tài liệu này
  • 2- JDBC là gì?
  • 3- Java kết nối với database dựa trên nguyên tắc nào?
  • 4- Download một số các driver quan trọng
  • 5- Tạo project để bắt đầu ví dụ với JDBC
  • 6- Connection
  • 7- Sử dụng JDBC API truy vấn dữ liệu
  • 8- Các kiểu ResultSet
  • 10- PreparedStatement
  • 11- CallableStatement
  • 12- Điều khiển giao dịch (Transaction)
  • 13- Thực thi một lô lệnh (Batch)

BatchExample.java
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.

Có thể bạn quan tâm

Đây là các khóa học trực tuyến bên ngoài website o7planning mà chúng tôi giới thiệu, nó có thể bao gồm các khóa học miễn phí hoặc giảm giá.

Nội dung chính

1- Database sử dụng trong tài liệu này "simplehr". Bạn có thể xem các script tạo database tại:

1- Database sử dụng trong tài liệu này

2- JDBC là gì? (Java Database Connectivity) là một API tiêu chuẩn dùng để tương tác với các loại cơ sở dữ liệu quan hệ. JDBC có một tập hợp các class và các Interface dùng cho ứng dụng Java có thể nói chuyện với các cơ sở dữ liệu.

3- Java kết nối với database dựa trên nguyên tắc nào?

  1. 4- Download một số các driver quan trọng :
    • 5- Tạo project để bắt đầu ví dụ với JDBC Driver (database drivers). 
  2. 6- Connection :
    • 7- Sử dụng JDBC API truy vấn dữ liệu
  3. 8- Các kiểu ResultSet :
    • 9- Ví dụ Insert dữ liệu Connection.
  4. Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người. Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất. Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi. :
    • Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới.
  5. Facebook :
    • Tài liệu hướng dẫn này sẽ hướng dẫn các sử dụng Java kết nối vào database. Database được sử dụng làm mẫu trong tài liệu này là "simplehr". Bạn có thể xem các script tạo database tại: đại diện cho tập hợp các bản ghi lấy do thực hiện truy vấn.

2- JDBC là gì?

3- Java kết nối với database dựa trên nguyên tắc nào? sử dụng JDBC để làm việc với các cơ sở dữ liệu.

4- Download một số các driver quan trọng JDBC API chúng ta có java.sql.Driver, nó chỉ là một interface, và nó có sẵn trong JDK. Như vậy bạn phải download thư viện Driver ứng với loại Database mà bạn mong muốn.

  • 5- Tạo project để bắt đầu ví dụ với JDBC Oracle thì class thi hành Interface java.sql.Driver đó là: oracle.jdbc.driver.OracleDriver

6- Connection là một class trong JDBC API. Nó làm nhiệm vụ quản lý các Driver.

7- Sử dụng JDBC API truy vấn dữ liệu

8- Các kiểu ResultSet

  • 9- Ví dụ Insert dữ liệu
  • Cách 2: Khai báo một "ODBC DataSource", và sử dụng cầu nối JDBC-ODBC để kết nối với "ODBC DataSource" kia. Cầu nối JDBC-ODBC là thứ có sẵn trong JDBC API."ODBC DataSource", và sử dụng cầu nối JDBC-ODBC để kết nối với "ODBC DataSource" kia. Cầu nối JDBC-ODBC là thứ có sẵn trong JDBC API.

Câu hỏi của chúng ta là "ODBC DataSource" là cái gì?"ODBC DataSource" là cái gì?

ODBC - Open Database Connectivity: Nó chính là một bộ thư viện mở, có khả năng kết nối với hầu hết các loại cơ sở dữ liệu khác nhau, và nó miễn phí. Được cung cấp bởi Microsoft.: Nó chính là một bộ thư viện mở, có khả năng kết nối với hầu hết các loại cơ sở dữ liệu khác nhau, và nó miễn phí. Được cung cấp bởi Microsoft.

ODBC DataSource: Trên hệ điều hành Window bạn có thể khai báo một kết nối ODBC tới một loại DB nào đó. Và như vậy chúng ta có một nguồn dữ liệu (Data Source).: Trên hệ điều hành Window bạn có thể khai báo một kết nối ODBC tới một loại DB nào đó. Và như vậy chúng ta có một nguồn dữ liệu (Data Source).

Trong JDBC API, đã xây dựng sẵn một cầu nối JDBC-ODBC để JDBC có thể nói chuyện được với ODBC Data Source. JDBC API, đã xây dựng sẵn một cầu nối JDBC-ODBC để JDBC có thể nói chuyện được với ODBC Data Source.

Về tốc độ, cách 1 sẽ nhanh hơn cách 2, vì cách 2 phải sử dụng tới cầu nối.

4- Download một số các driver quan trọng

Trong trường hợp nếu bạn không muốn sử dụng JDBC-ODBC, bạn có thể sử dụng cách trực tiếp kết nối vào Database, trong trường hợp đó cần phải download Driver ứng với mỗi loại DB này. Tại đây tôi hướng dẫn download một loại Driver cho các Database thông dụng: JDBC-ODBC, bạn có thể sử dụng cách trực tiếp kết nối vào Database, trong trường hợp đó cần phải download Driver ứng với mỗi loại DB này. Tại đây tôi hướng dẫn download một loại Driver cho các Database thông dụng:

  • Oracle
  • MySQL
  • SQLServer
  • ....

Bạn có thể xem hướng dẫn tại:

Kết quả chúng ta có một vài file:

Database Library
Oracle ojdbc6.jar
MySQL mysql-connector-java-x.jar
SQL Server jtds-x.jar
sqljdbc4.jar

5- Tạo project để bắt đầu ví dụ với JDBC

Tạo mới project JavaJdbcTutorial: JavaJdbcTutorial:

Tạo thư mục libs trên project và copy các thư viện kết nối trực tiếp các loại database Oracle, MySQL, SQLServer mà bạn vừa download được ở trên vào. Bạn có thể copy hết hoặc một trong các thư viện đó, theo loại DB mà bạn sử dụng. libs trên project và copy các thư viện kết nối trực tiếp các loại database Oracle, MySQL, SQLServer mà bạn vừa download được ở trên vào. Bạn có thể copy hết hoặc một trong các thư viện đó, theo loại DB mà bạn sử dụng.

Chú ý: Bạn chỉ cần download một Driver ứng với loại Database mà bạn quen thuộc. Cơ sở dữ liệu dùng làm ví dụ trong tài liệu này bạn có thể lấy tại:

Nhấn phải vào Project chọn Properties:

Giờ thì bạn có thể sẵn sàng làm việc với một trong các Database (Oracle, MySQL, SQL Server) Oracle, MySQL, SQL Server)

6- Connection

Trong tài liệu hướng dẫn này tôi sẽ hướng dẫn các kết nối vào cả 3 loại database:

  • MySQL
  • SQLServer
  • Oracle

MySQLDB nào mà bạn quen thuộc.

SQLServerConnectionUtils để lấy ra đối tượng Connection kết nối với Database.

ConnectionUtils.java


package org.o7planning.tutorial.jdbc;

import java.sql.Connection;
import java.sql.SQLException;

public class ConnectionUtils {

  public static Connection getMyConnection() throws SQLException,
          ClassNotFoundException {
      // Sử dụng Oracle.
      // Bạn có thể thay thế bởi Database nào đó.
      return OracleConnUtils.getOracleConnection();
  }

  //
  // Test Connection ...
  //
  public static void main(String[] args) throws SQLException,
          ClassNotFoundException {

      System.out.println("Get connection ... ");

      // Lấy ra đối tượng Connection kết nối vào database.
      Connection conn = ConnectionUtils.getMyConnection();

      System.out.println("Get connection " + conn);

      System.out.println("Done!");
  }

}

OracleConnUtils.java


package org.o7planning.tutorial.jdbc;

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

public class OracleConnUtils {

 // Kết nối vào ORACLE.
 public static Connection getOracleConnection() throws SQLException,
         ClassNotFoundException {
     String hostName = "localhost";
     String sid = "db11g";
     String userName = "simplehr";
     String password = "simplehr";

     return getOracleConnection(hostName, sid, userName, password);
 }

 public static Connection getOracleConnection(String hostName, String sid,
         String userName, String password) throws ClassNotFoundException,
         SQLException {

     // Khai báo class Driver cho DB Oracle
     // Việc này cần thiết với Java 5
     // Java6 tự động tìm kiếm Driver thích hợp.
     // Nếu bạn dùng Java6, thì ko cần dòng này cũng được.
     Class.forName("oracle.jdbc.driver.OracleDriver");

     // Cấu trúc URL Connection dành cho Oracle
     // Ví dụ: jdbc:oracle:thin:@localhost:1521:db11g
     String connectionURL = "jdbc:oracle:thin:@" + hostName + ":1521:" + sid;

     Connection conn = DriverManager.getConnection(connectionURL, userName,
             password);
     return conn;
 }
}

MySQLConnUtils.java


package org.o7planning.tutorial.jdbc;

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

public class MySQLConnUtils {

 // Kết nối vào MySQL.
 public static Connection getMySQLConnection() throws SQLException,
         ClassNotFoundException {
     String hostName = "localhost";

     String dbName = "simplehr";
     String userName = "root";
     String password = "1234";

     return getMySQLConnection(hostName, dbName, userName, password);
 }

 public static Connection getMySQLConnection(String hostName, String dbName,
         String userName, String password) throws SQLException,
         ClassNotFoundException {
     // Khai báo class Driver cho DB MySQL
     // Việc này cần thiết với Java 5
     // Java6 tự động tìm kiếm Driver thích hợp.
     // Nếu bạn dùng Java6, thì ko cần dòng này cũng được.
     Class.forName("com.mysql.jdbc.Driver");

     // Cấu trúc URL Connection dành cho Oracle
     // Ví dụ: jdbc:mysql://localhost:3306/simplehr
     String connectionURL = "jdbc:mysql://" + hostName + ":3306/" + dbName;

     Connection conn = DriverManager.getConnection(connectionURL, userName,
             password);
     return conn;
 }
}

SQLServerConnUtils_JTDS.java


package org.o7planning.tutorial.jdbc;

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

public class SQLServerConnUtils_JTDS {


 // Kết nối vào SQLServer.
 // (Sử dụng thư viện điều khiển JTDS)
 public static Connection getSQLServerConnection()
         throws SQLException, ClassNotFoundException {
     String hostName = "localhost";
     String sqlInstanceName = "SQLEXPRESS";
     String database = "simplehr";
     String userName = "sa";
     String password = "1234";

     return getSQLServerConnection(hostName, sqlInstanceName, database,
             userName, password);
 }


 // Trường hợp sử dụng SQLServer.
 // Và thư viện JTDS.
 public static Connection getSQLServerConnection(String hostName,
         String sqlInstanceName, String database, String userName,
         String password) throws ClassNotFoundException, SQLException {
     // Khai báo class Driver cho DB SQLServer
     // Việc này cần thiết với Java 5
     // Java6 tự động tìm kiếm Driver thích hợp.
     // Nếu bạn dùng Java6, thì ko cần dòng này cũng được.
     Class.forName("net.sourceforge.jtds.jdbc.Driver");

     // Cấu trúc URL Connection dành cho SQLServer
     // Ví dụ:
     // jdbc:jtds:sqlserver://localhost:1433/simplehr;instance=SQLEXPRESS
     String connectionURL = "jdbc:jtds:sqlserver://" + hostName + ":1433/"
             + database + ";instance=" + sqlInstanceName;

     Connection conn = DriverManager.getConnection(connectionURL, userName,
             password);
     return conn;
 }

}

SQLServerConnUtils_SQLJDBC.java


package org.o7planning.tutorial.jdbc;

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

public class SQLServerConnUtils_SQLJDBC {

 // Kết nối vào SQLServer.
 // (Sử dụng thư viện điều khiển SQLJDBC)
 public static Connection getSQLServerConnection()
         throws SQLException, ClassNotFoundException {
     String hostName = "localhost";
     String sqlInstanceName = "SQLEXPRESS";
     String database = "simplehr";
     String userName = "sa";
     String password = "1234";

     return getSQLServerConnection(hostName, sqlInstanceName,
             database, userName, password);
 }

 // Trường hợp sử dụng SQLServer.
 // Và thư viện SQLJDBC.
 public static Connection getSQLServerConnection(String hostName,
         String sqlInstanceName, String database, String userName,
         String password) throws ClassNotFoundException, SQLException {
     // Khai báo class Driver cho DB SQLServer
     // Việc này cần thiết với Java 5
     // Java6 tự động tìm kiếm Driver thích hợp.
     // Nếu bạn dùng Java6, thì ko cần dòng này cũng được.
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

     // Cấu trúc URL Connection dành cho SQLServer
     // Ví dụ:
     // jdbc:sqlserver://ServerIp:1433/SQLEXPRESS;databaseName=simplehr
     String connectionURL = "jdbc:sqlserver://" + hostName + ":1433"
             + ";instance=" + sqlInstanceName + ";databaseName=" + database;

     Connection conn = DriverManager.getConnection(connectionURL, userName,
             password);
     return conn;
 }

}

ODBCConnUtils.java


package org.o7planning.tutorial.jdbc;

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

public class ODBCConnUtils {

  // Lấy ra kết nối vào ODBC Data Source có tên "simplehr-ds".
  public static Connection getJdbcOdbcConnection() throws SQLException,
          ClassNotFoundException {
      String odbcDataSourceName = "simplehr-ds";
      String userName = "simplehr";
      String password = "simplehr";
      return getJdbcOdbcConnection(odbcDataSourceName, userName, password);
  }

  public static Connection getJdbcOdbcConnection(String odbcDataSourceName,
          String userName, String password) throws SQLException,
          ClassNotFoundException {

      // Khai báo class Driver (Cầu nối Jdbc-Odbc)
      // Việc này cần thiết với Java 5
      // Java6 tự động tìm kiếm Driver thích hợp.
      // Nếu bạn dùng Java6, thì ko cần dòng này cũng được.
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

      // Cấu trúc URL Connection dành cho JDBC-ODBC
      String connectionURL = "jdbc:odbc:" + odbcDataSourceName;

      Connection conn = DriverManager.getConnection(connectionURL, userName,
              password);
      return conn;
  }
}

....ConnectionUtils để sử dụng kết nối tới một Database nào đó quen thuộc. Và chạy class này để test kết nối.

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
0

Bạn có thể xem hướng dẫn tại: MySQL hoặc SQL Server mặc định 2 Database này chặn không cho phép kết nối vào nó từ một IP khác. Bạn cần cấu hình để cho phép điều này. Bạn có thể xem hướng dẫn trong tài liệu cài đặt và cấu hình MySQL, SQL Server trên o7planning.

Kết quả chúng ta có một vài file: MySQL Community:

Database

Library

Oracle Employee. Chúng ta sẽ xem cách Java lấy ra dữ liệu thế nào thông qua một ví dụ:

ojdbc6.jar là một đối tượng Java, nó được trả về khi bạn truy vấn (query) dữ liệu. Sử dụng ResultSet.next() để di chuyển con trỏ tới các bản ghi tiếp theo (Di chuyển dòng). Tại một bản ghi nào đó bạn sử dụng các method ResultSet.getXxx() để lấy ra các giá trị tại các cột. Các cột được đánh với thứ tự 1,2,3,... 

MySQL

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
1

mysql-connector-java-x.jar

QueryDataExample.java

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
2

SQL Server

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
3

jtds-x.jar

sqljdbc4.jar ResultSet với các ví dụ phía trên. Mặc định các ResultSet khi duyệt dữ liệu chỉ có thể chạy từ trên xuống dưới, từ trái sang phải. Điều đó có nghĩa là với các ResultSet mặc định bạn không thể gọi:

  • 5- Tạo project để bắt đầu ví dụ với JDBC   : Lùi lại một bản ghi.
  • Tạo mới project JavaJdbcTutorial: ResultSet.getXxx(4) rồi mới gọi ResultSet.getXxx(2).

Tạo thư mục libs trên project và copy các thư viện kết nối trực tiếp các loại database Oracle, MySQL, SQLServer mà bạn vừa download được ở trên vào. Bạn có thể copy hết hoặc một trong các thư viện đó, theo loại DB mà bạn sử dụng. Exception.

Chú ý: Bạn chỉ cần download một Driver ứng với loại Database mà bạn quen thuộc. Cơ sở dữ liệu dùng làm ví dụ trong tài liệu này bạn có thể lấy tại:
Nhấn phải vào Project chọn Properties: Giờ thì bạn có thể sẵn sàng làm việc với một trong các Database (Oracle, MySQL, SQL Server)
6- Connection Trong tài liệu hướng dẫn này tôi sẽ hướng dẫn các kết nối vào cả 3 loại database: ResultSet chỉ cho phép duyệt từ trên xuống dưới, từ trái sang phải. Đây là kiểu mặc định của các ResultSet.
Trong khi thực hành, bạn chỉ cần làm việc với một loại DB nào mà bạn quen thuộc. Chúng ta tạo class ConnectionUtils để lấy ra đối tượng Connection kết nối với Database. ResultSet cho phép cuộn tiến lùi, sang trái, sang phải, nhưng không nhạy với các sự thay đổi dữ liệu dưới DB. Nghĩa là trong quá trình duyệt qua một bản ghi và lúc nào đó duyệt lại bản ghi đó, nó không lấy các dữ liệu mới nhất của bản ghi mà có thể bị ai đó thay đổi.
Bạn có thể thay đổi Class ConnectionUtils để sử dụng kết nối tới một Database nào đó quen thuộc. Và chạy class này để test kết nối. Chú ý: Nếu bạn sử dụng MySQL hoặc SQL Server mặc định 2 Database này chặn không cho phép kết nối vào nó từ một IP khác. Bạn cần cấu hình để cho phép điều này. Bạn có thể xem hướng dẫn trong tài liệu cài đặt và cấu hình MySQL, SQL Server trên o7planning. ResultSet cho phép cuộn tiến lùi, sang trái, sang phải, và nhạy cảm với sự thay đổi dữ liệu.
Cài đặt và cấu hình MySQL Community: Giờ thì bạn có thể sẵn sàng làm việc với một trong các Database (Oracle, MySQL, SQL Server)
6- Connection Trong tài liệu hướng dẫn này tôi sẽ hướng dẫn các kết nối vào cả 3 loại database: ResultSet kiểu này bạn chỉ có thể đọc dữ liệu.
Trong khi thực hành, bạn chỉ cần làm việc với một loại DB nào mà bạn quen thuộc. Chúng ta tạo class ConnectionUtils để lấy ra đối tượng Connection kết nối với Database. ResultSet kiểu này bạn chỉ có thể thay đổi dữ liệu tại nơi con trỏ đứng, ví dụ update giá trị cột nào đó.

ScrollableResultSetExample.java

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
5

Kết quả chạy ví dụ:

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
6

9- Ví dụ Insert dữ liệu

InsertDataExample.java

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
7

Kết quả chạy ví dụ:

10- PreparedStatement

PreparedStatement là một Interface con của Statement. là một Interface con của Statement.

PreparedStatement sử dụng để chuẩn bị trước các câu lệnh SQL, và tái sử dụng nhiều lần, giúp cho chương trình thực hiện nhanh hơn. sử dụng để chuẩn bị trước các câu lệnh SQL, và tái sử dụng nhiều lần, giúp cho chương trình thực hiện nhanh hơn.

PrepareStatementExample.java

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
8

Kết quả chạy ví dụ:

INSERT INTO student(id, name, address) VALUES (1, "Công", "Hanoi");
INSERT INTO student(id, name, address) VALUES (2, "Dung", "Vinhphuc");
INSERT INTO student(id, name, address) VALUES (3, "Ngôn", "Danang");
INSERT INTO student(id, name, address) VALUES (4, "Hạnh", "Hanoi")
9

11- CallableStatement

CallableStatement được xây dựng để gọi một thủ tục (procedure) hoặc hàm (function) của SQL. được xây dựng để gọi một thủ tục (procedure) hoặc hàm (function) của SQL.

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
0

Để làm ví dụ với CallableStatement chúng ta cần một hàm hoặc một thủ tục trong DB. Với Oracle, MySQL hoặc SQLServer bạn có thể tạo nhanh một thủ tục như dưới đây: CallableStatement chúng ta cần một hàm hoặc một thủ tục trong DB. Với Oracle, MySQL hoặc SQLServer bạn có thể tạo nhanh một thủ tục như dưới đây:

ORACLE

Get_Employee_Info

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
1

MySQL

Get_Employee_Info

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
2

SQL Server

Get_Employee_Info

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
3

CallableStatementExample.java

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
4

Kết quả chạy ví dụ:

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
5

12- Điều khiển giao dịch (Transaction)

Giao dịch (Transaction) là một khái niệm quan trọng trong SQL.SQL.

Ví dụ người A chuyển một khoản tiền 1000$ vào tài khoản người B như vậy trong Database diễn ra 2 quá trình:

  • Trừ số dư tài khoản của người A đi 1000$
  • Thêm vào số dư tài khoản của người B 1000$.

Và giao dịch được gọi là thành công nếu cả 2 bước kia thành công. Ngược lại chỉ cần 1 trong hai bước hỏng là coi như giao dịch không thành công, phải rollback lại trạng thái ban đầu.

TransactionExample.java

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
6

13- Thực thi một lô lệnh (Batch)

BatchExample.java

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
7

Kết quả chạy ví dụ:

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
8

BatchExample2.java

package vn.viettuts.jdbc;

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

public class ConnectMysqlExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";

    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        try {
            // connnect to database 'testdb'
            Connection conn = getConnection(DB_URL, USER_NAME, PASSWORD);
            // crate statement
            Statement stmt = conn.createStatement();
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery("select * from student");
            // show data
            while (rs.next()) {
                System.out.println(rs.getInt(1) + "  " + rs.getString(2) 
                        + "  " + rs.getString(3));
            }
            // close connection
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    /**
     * create connection 
     * 
     * @author viettuts.vn
     * @param dbURL: database's url
     * @param userName: username is used to login
     * @param password: password is used to login
     * @return connection
     */
    public static Connection getConnection(String dbURL, String userName, 
            String password) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(dbURL, userName, password);
            System.out.println("connect successfully!");
        } catch (Exception ex) {
            System.out.println("connect failure!");
            ex.printStackTrace();
        }
        return conn;
    }
}
9

Kết quả chạy ví dụ:

connect successfully!
1  Công  Hanoi
2  Dung  Vinhphuc
3  Ngôn  Danang
4  Hạnh  Hanoi
0

Có thể bạn quan tâm

Đây là các khóa học trực tuyến bên ngoài website o7planning mà chúng tôi giới thiệu, nó có thể bao gồm các khóa học miễn phí hoặc giảm giá.