Hướng dẫn is mysql written in java? - mysql có được viết bằng java không?

Sửa đổi lần cuối vào ngày 6 tháng 7 năm 2020

Đây là hướng dẫn Java cho cơ sở dữ liệu MySQL. Nó bao gồm những điều cơ bản của chương trình MySQL trong Java với JDBC. Zetcode có một cuốn sách điện tử hoàn chỉnh cho MySQL Java: MySQL Java Lập trình sách điện tử.

Trong hướng dẫn này, chúng tôi sử dụng trình điều khiển đầu nối MYSQL/J. Đây là trình điều khiển JDBC chính thức cho MySQL. Các ví dụ đã được tạo và thử nghiệm trên Ubuntu Linux. Bạn cũng có thể muốn kiểm tra hướng dẫn Java, hướng dẫn Java PostgreSQL, hướng dẫn MySQL hoặc hướng dẫn JDBCTemplate Spring trên ZetCode.

JDBC

JDBC là API cho ngôn ngữ lập trình Java xác định cách khách hàng có thể truy cập cơ sở dữ liệu. Nó cung cấp các phương thức để truy vấn và cập nhật dữ liệu trong cơ sở dữ liệu. JDBC được định hướng theo cơ sở dữ liệu quan hệ. Từ quan điểm kỹ thuật, API là một tập hợp các lớp trong gói java.sql. Để sử dụng JDBC với một cơ sở dữ liệu cụ thể, chúng tôi cần một trình điều khiển JDBC cho cơ sở dữ liệu đó.

JDBC là một nền tảng cho lập trình cơ sở dữ liệu trong Java. Ngày nay, nó được coi là cấp độ rất thấp và dễ bị lỗi. Các giải pháp như mybatis hoặc jdbctemplate đã được tạo ra để giảm bớt gánh nặng của lập trình JDBC. Tuy nhiên, dưới mui xe, các giải pháp này vẫn sử dụng JDBC. JDBC là một phần của nền tảng phiên bản tiêu chuẩn Java.

JDBC quản lý ba hoạt động lập trình chính này:

  • kết nối với cơ sở dữ liệu;
  • gửi các truy vấn và cập nhật các câu lệnh đến cơ sở dữ liệu;
  • Lấy và xử lý các kết quả nhận được từ cơ sở dữ liệu để trả lời truy vấn.

Đầu nối MySQL/j

Để kết nối với MySQL trong Java, MySQL cung cấp Trình kết nối MySQL/J, một trình điều khiển thực hiện API JDBC. Trình kết nối MySQL/J là trình điều khiển loại 4 của JDBC. Chỉ định loại 4 có nghĩa là trình điều khiển là triển khai Java thuần túy của giao thức MYSQL và không dựa vào các thư viện máy khách MySQL. Trong hướng dẫn này, chúng tôi sử dụng Trình kết nối MySQL/J 5.1.41, đây là bản phát hành bảo trì của Chi nhánh sản xuất 5.1.

Chuỗi kết nối

Kết nối cơ sở dữ liệu được xác định với chuỗi kết nối. Nó chứa thông tin như loại cơ sở dữ liệu, tên cơ sở dữ liệu, tên máy chủ và số cổng. Nó cũng có thể chứa các cặp khóa/giá trị bổ sung cho cấu hình. Mỗi cơ sở dữ liệu có định dạng chuỗi kết nối riêng.

Sau đây là cú pháp của chuỗi kết nối MySQL:

jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] 
    [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

Có thể chỉ định nhiều máy chủ cho thiết lập chuyển đổi dự phòng máy chủ. Các mặt hàng trong ngoặc vuông là tùy chọn. Nếu không có máy chủ được chỉ định, tên máy chủ mặc định là localhost. Nếu cổng cho máy chủ không được chỉ định, nó mặc định là 3306, số cổng mặc định cho các máy chủ MySQL.

jdbc:mysql://localhost:3306/testdb?useSSL=false

Đây là một ví dụ về chuỗi kết nối MySQL.

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
1 được gọi là giao thức phụ và không đổi cho MySQL. Chúng tôi kết nối với
String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
2 trên cổng tiêu chuẩn MySQL 3306. Tên cơ sở dữ liệu là
String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
3. Các cặp khóa/giá trị bổ sung tuân theo ký tự dấu câu hỏi (?).
String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
4 nói với MySQL rằng sẽ không có kết nối an toàn.

Về cơ sở dữ liệu MySQL

MySQL là một hệ thống quản lý cơ sở dữ liệu nguồn mở hàng đầu. Nó là một người dùng nhiều người dùng, hệ thống quản lý cơ sở dữ liệu đa luồng. MySQL đặc biệt phổ biến trên web. Đây là một phần của nền tảng đèn rất phổ biến bao gồm Linux, Apache, MySQL và PHP. Hiện tại MySQL thuộc sở hữu của Oracle. Cơ sở dữ liệu MySQL có sẵn trên hầu hết các nền tảng HĐH quan trọng. Nó chạy trên BSD Unix, Linux, Windows hoặc Mac OS. Wikipedia và YouTube sử dụng MySQL. Các trang web này quản lý hàng triệu truy vấn mỗi ngày. MySQL có hai phiên bản: Hệ thống máy chủ MySQL và hệ thống nhúng MySQL.

Thiết lập MySQL

Trong phần này, chúng tôi sẽ cài đặt máy chủ MySQL, tạo cơ sở dữ liệu

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
3 và người dùng thử nghiệm.

$ sudo apt-get install mysql-server

Lệnh này cài đặt máy chủ MySQL và nhiều gói khác. Trong khi cài đặt gói, chúng tôi được nhắc nhập mật khẩu cho tài khoản gốc MySQL.

Tiếp theo, chúng tôi sẽ tạo một người dùng cơ sở dữ liệu mới và cơ sở dữ liệu mới. Chúng tôi sử dụng máy khách

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
6.

$ sudo service mysql status
mysql start/running, process 5129

Chúng tôi kiểm tra xem máy chủ MySQL có đang chạy không. Nếu không, chúng ta cần khởi động máy chủ. Trên Ubuntu Linux, điều này có thể được thực hiện với lệnh

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
7.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)

Chúng tôi sử dụng ứng dụng máy khách theo dõi MySQL để kết nối với máy chủ. Chúng tôi kết nối với cơ sở dữ liệu bằng tài khoản gốc. Chúng tôi hiển thị tất cả các cơ sở dữ liệu có sẵn với câu lệnh

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
8.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)

Chúng tôi tạo một cơ sở dữ liệu

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
3 mới. Chúng tôi sẽ sử dụng cơ sở dữ liệu này trong suốt hướng dẫn.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye

Chúng tôi tạo một người dùng cơ sở dữ liệu mới. Chúng tôi cấp tất cả các đặc quyền cho người dùng này cho tất cả các bảng của cơ sở dữ liệu TestDB.

Tệp Maven

Chúng tôi sử dụng tệp maven sau:

pom.xml


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

Tệp POM có sự phụ thuộc cho trình điều khiển MySQL. Chúng tôi cũng bao gồm

jdbc:mysql://localhost:3306/testdb?useSSL=false
00 để thực hiện các chương trình Java từ Maven. Giữa các thẻ
jdbc:mysql://localhost:3306/testdb?useSSL=false
01, chúng tôi cung cấp tên đầy đủ của ứng dụng.

Phiên bản Java MySQL

Nếu chương trình sau chạy OK, thì chúng tôi đã cài đặt mọi thứ OK. Chúng tôi kiểm tra phiên bản của máy chủ MySQL.

JdbcMySQLVersion.java

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}

Chúng tôi kết nối với cơ sở dữ liệu và nhận được một số thông tin về máy chủ MySQL.

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";

Đây là URL kết nối cho cơ sở dữ liệu MySQL. Mỗi trình điều khiển có một cú pháp khác nhau cho URL. Trong trường hợp của chúng tôi, chúng tôi cung cấp một máy chủ, một cổng và tên cơ sở dữ liệu.

jdbc:mysql://localhost:3306/testdb?useSSL=false
0

Chúng tôi thiết lập kết nối với cơ sở dữ liệu, sử dụng URL kết nối, tên người dùng và mật khẩu. Kết nối được thiết lập với phương pháp

jdbc:mysql://localhost:3306/testdb?useSSL=false
02.

Phương thức

jdbc:mysql://localhost:3306/testdb?useSSL=false
03 của đối tượng kết nối tạo đối tượng
jdbc:mysql://localhost:3306/testdb?useSSL=false
04 để gửi các câu lệnh SQL đến cơ sở dữ liệu.

Phương thức

jdbc:mysql://localhost:3306/testdb?useSSL=false
05 của đối tượng kết nối thực thi câu lệnh SQL đã cho, trả về một đối tượng ____106.
jdbc:mysql://localhost:3306/testdb?useSSL=false
06 là một bảng dữ liệu được trả về bởi một câu lệnh SQL cụ thể.

Cú pháp

jdbc:mysql://localhost:3306/testdb?useSSL=false
08 đảm bảo rằng các tài nguyên được làm sạch cuối cùng.

jdbc:mysql://localhost:3306/testdb?useSSL=false
1

Một đối tượng

jdbc:mysql://localhost:3306/testdb?useSSL=false
06 duy trì một con trỏ chỉ vào hàng dữ liệu hiện tại của nó. Ban đầu con trỏ được định vị trước hàng đầu tiên. Phương thức
jdbc:mysql://localhost:3306/testdb?useSSL=false
10 di chuyển con trỏ sang hàng tiếp theo. Nếu không còn hàng, phương thức trả về
jdbc:mysql://localhost:3306/testdb?useSSL=false
11. Phương thức
jdbc:mysql://localhost:3306/testdb?useSSL=false
12 lấy giá trị của một cột được chỉ định. Cột đầu tiên có chỉ mục 1.

jdbc:mysql://localhost:3306/testdb?useSSL=false
2

Trong trường hợp ngoại lệ, chúng tôi đăng nhập thông báo lỗi. Đối với ví dụ bảng điều khiển này, thông báo được hiển thị trong thiết bị đầu cuối.

jdbc:mysql://localhost:3306/testdb?useSSL=false
3

Chúng tôi chạy chương trình từ dòng lệnh. Tùy chọn

jdbc:mysql://localhost:3306/testdb?useSSL=false
13 của Manen chạy Maven ở chế độ yên tĩnh; tức là chúng ta chỉ thấy thông báo lỗi.

Tạo và điền vào bảng

Tiếp theo, chúng tôi sẽ tạo các bảng cơ sở dữ liệu và điền vào chúng bằng dữ liệu. Những bảng này sẽ được sử dụng trong suốt hướng dẫn này.

mysql_tables.sql

jdbc:mysql://localhost:3306/testdb?useSSL=false
4

Các lệnh SQL tạo bốn bảng cơ sở dữ liệu:

jdbc:mysql://localhost:3306/testdb?useSSL=false
14,
jdbc:mysql://localhost:3306/testdb?useSSL=false
15,
jdbc:mysql://localhost:3306/testdb?useSSL=false
16 và
jdbc:mysql://localhost:3306/testdb?useSSL=false
17. Các bảng thuộc loại innodb. Cơ sở dữ liệu Innodb hỗ trợ các ràng buộc và giao dịch chính của nước ngoài. Chúng tôi đặt một ràng buộc khóa nước ngoài trên cột
jdbc:mysql://localhost:3306/testdb?useSSL=false
18 của bảng
jdbc:mysql://localhost:3306/testdb?useSSL=false
15. Chúng tôi điền vào các bảng
jdbc:mysql://localhost:3306/testdb?useSSL=false
14 và
jdbc:mysql://localhost:3306/testdb?useSSL=false
15 bằng dữ liệu ban đầu.

jdbc:mysql://localhost:3306/testdb?useSSL=false
5

Chúng tôi sử dụng lệnh

jdbc:mysql://localhost:3306/testdb?useSSL=false
22 để thực thi tập lệnh
jdbc:mysql://localhost:3306/testdb?useSSL=false
23.

Java MySQL đã chuẩn bị các câu lệnh

Bây giờ chúng tôi sẽ quan tâm đến bản thân với những tuyên bố đã chuẩn bị. Khi chúng tôi viết các câu lệnh được chuẩn bị, chúng tôi sử dụng các trình giữ chỗ thay vì viết trực tiếp các giá trị vào các câu lệnh. Chuẩn bị báo cáo tăng bảo mật và hiệu suất.

Trong Java A

jdbc:mysql://localhost:3306/testdb?useSSL=false
24 là một đối tượng đại diện cho câu lệnh SQL được biên dịch trước.

JdbcPrepared.java

jdbc:mysql://localhost:3306/testdb?useSSL=false
6

Chúng tôi thêm một tác giả mới vào bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14.

jdbc:mysql://localhost:3306/testdb?useSSL=false
7

Ở đây chúng tôi tạo ra một tuyên bố đã chuẩn bị. Khi chúng tôi viết các câu lệnh được chuẩn bị, chúng tôi sử dụng các trình giữ chỗ thay vì viết trực tiếp các giá trị vào các câu lệnh. Các tuyên bố chuẩn bị nhanh hơn và bảo vệ chống lại các cuộc tấn công tiêm SQL.

jdbc:mysql://localhost:3306/testdb?useSSL=false
26 là một trình giữ chỗ sẽ được lấp đầy sau đó.

jdbc:mysql://localhost:3306/testdb?useSSL=false
8

Một giá trị bị ràng buộc với trình giữ chỗ.

jdbc:mysql://localhost:3306/testdb?useSSL=false
9

Tuyên bố đã chuẩn bị được thực thi. Chúng tôi sử dụng phương thức

jdbc:mysql://localhost:3306/testdb?useSSL=false
27 của đối tượng câu lệnh khi chúng tôi không mong đợi bất kỳ dữ liệu nào được trả về. Đây là khi chúng tôi tạo cơ sở dữ liệu hoặc thực thi các câu lệnh
jdbc:mysql://localhost:3306/testdb?useSSL=false
28,
jdbc:mysql://localhost:3306/testdb?useSSL=false
29,
jdbc:mysql://localhost:3306/testdb?useSSL=false
30.

$ sudo apt-get install mysql-server
0

Chúng tôi có một tác giả mới được chèn vào bàn.

Kiểm tra các câu lệnh được chuẩn bị và không chuẩn bị của MySQL

Đối với hai ví dụ sau, chúng tôi sẽ sử dụng bảng thử nghiệm. Chúng tôi sẽ thực hiện một tuyên bố bình thường và một tuyên bố đã chuẩn bị 5000 lần. Chúng tôi kiểm tra xem có một số khác biệt về thời gian thực hiện.

JdbcNotPreparedTesting.java

$ sudo apt-get install mysql-server
1

Ví dụ đầu tiên sử dụng đối tượng

jdbc:mysql://localhost:3306/testdb?useSSL=false
04 bình thường.

$ sudo apt-get install mysql-server
2

Chúng tôi xây dựng truy vấn và thực hiện nó 5000 lần.

$ sudo apt-get install mysql-server
3

Nó 4,14 phút để hoàn thành 5000 chèn.

JdbcPreparedTesting.java

$ sudo apt-get install mysql-server
4

Bây giờ chúng tôi sử dụng

jdbc:mysql://localhost:3306/testdb?useSSL=false
24 để thực hiện cùng một nhiệm vụ.

$ sudo apt-get install mysql-server
5

Chúng tôi tạo câu lệnh đã chuẩn bị bằng phương pháp

jdbc:mysql://localhost:3306/testdb?useSSL=false
33.

$ sudo apt-get install mysql-server
6

Chúng tôi liên kết một giá trị với câu lệnh đã chuẩn bị, thực hiện nó trong một vòng hàng ngàn lần.

$ sudo apt-get install mysql-server
7

Bây giờ phải mất 3,53 phút để hoàn thành 5000 chèn. Chúng tôi đã lưu 20 giây.

Java MySQL truy xuất dữ liệu

Tiếp theo chúng tôi sẽ chỉ ra cách lấy dữ liệu từ bảng cơ sở dữ liệu. Chúng tôi nhận được tất cả dữ liệu từ bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14.

JdbcRetrieve.java

$ sudo apt-get install mysql-server
8

Chúng tôi nhận được tất cả các tác giả từ bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14 và in chúng vào bảng điều khiển.

$ sudo apt-get install mysql-server
9

Chúng tôi thực hiện một truy vấn chọn tất cả các cột từ bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14. Chúng tôi sử dụng phương pháp
jdbc:mysql://localhost:3306/testdb?useSSL=false
05. Phương thức thực thi câu lệnh SQL đã cho, trả về một đối tượng
jdbc:mysql://localhost:3306/testdb?useSSL=false
06 duy nhất.
jdbc:mysql://localhost:3306/testdb?useSSL=false
06 là bảng dữ liệu được trả về bởi truy vấn SQL.

$ sudo service mysql status
mysql start/running, process 5129
0

Phương pháp

jdbc:mysql://localhost:3306/testdb?useSSL=false
10 tiến lên con trỏ sang bản ghi tiếp theo. Nó trả về
jdbc:mysql://localhost:3306/testdb?useSSL=false
11 khi không còn hàng trong tập kết quả. Các phương thức
jdbc:mysql://localhost:3306/testdb?useSSL=false
42 và
jdbc:mysql://localhost:3306/testdb?useSSL=false
12 Lấy giá trị của cột được chỉ định trong hàng hiện tại của đối tượng
jdbc:mysql://localhost:3306/testdb?useSSL=false
06 này dưới dạng
jdbc:mysql://localhost:3306/testdb?useSSL=false
45 và
jdbc:mysql://localhost:3306/testdb?useSSL=false
46 của ngôn ngữ lập trình Java.

$ sudo service mysql status
mysql start/running, process 5129
1

Chúng tôi thực hiện chương trình; Chúng tôi có ID và tên của các tác giả được in vào bảng điều khiển.

Đặc tính

Đó là một thực tế phổ biến để đặt dữ liệu cấu hình bên ngoài chương trình trong một tệp riêng biệt. Bằng cách này, các lập trình viên linh hoạt hơn. Chúng tôi có thể thay đổi người dùng, mật khẩu hoặc URL kết nối mà không cần phải biên dịch lại chương trình. Nó đặc biệt hữu ích trong một môi trường năng động, nơi cần có nhiều thử nghiệm, gỡ lỗi, đảm bảo dữ liệu, v.v.

Trong Java,

jdbc:mysql://localhost:3306/testdb?useSSL=false
47 là một lớp thường được sử dụng cho việc này. Lớp được sử dụng để dễ đọc và lưu các thuộc tính khóa/giá trị.

db.properties

$ sudo service mysql status
mysql start/running, process 5129
2

Chúng tôi có một tệp

jdbc:mysql://localhost:3306/testdb?useSSL=false
48 trong đó chúng tôi có ba cặp khóa/giá trị. Chúng được tải động trong quá trình thực hiện chương trình.

JdbcProperties.java

$ sudo service mysql status
mysql start/running, process 5129
3

Chúng tôi kết nối với cơ sở dữ liệu TestDB và in nội dung của bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14 vào bảng điều khiển. Lần này, chúng tôi tải các thuộc tính kết nối từ một tệp. Chúng không được mã hóa cứng trong Proram.

$ sudo service mysql status
mysql start/running, process 5129
4

Lớp

jdbc:mysql://localhost:3306/testdb?useSSL=false
47 được tạo. Dữ liệu được tải từ tệp được gọi là
jdbc:mysql://localhost:3306/testdb?useSSL=false
48, trong đó chúng tôi có dữ liệu cấu hình của chúng tôi.

$ sudo service mysql status
mysql start/running, process 5129
5

Các giá trị được lấy bằng phương pháp

jdbc:mysql://localhost:3306/testdb?useSSL=false
52.

Dữ liệu Java MySQL

Trong ví dụ này, chúng tôi kết nối với cơ sở dữ liệu bằng nguồn dữ liệu. Việc sử dụng nguồn dữ liệu giúp cải thiện hiệu suất và khả năng mở rộng của ứng dụng. Sử dụng một bộ dữ liệu có một số lợi thế so với

jdbc:mysql://localhost:3306/testdb?useSSL=false
53: tăng tính di động, gộp kết nối và giao dịch phân tán.

jdbc:mysql://localhost:3306/testdb?useSSL=false
54 là một lớp để tạo dữ liệu.

db.properties

$ sudo service mysql status
mysql start/running, process 5129
6

Là các thuộc tính cho cơ sở dữ liệu MySQL.

ComLineDSEx.java

$ sudo service mysql status
mysql start/running, process 5129
7

Trong ví dụ này, chúng tôi kết nối với cơ sở dữ liệu bằng cách sử dụng dữ liệu.

$ sudo service mysql status
mysql start/running, process 5129
8

Các thuộc tính cơ sở dữ liệu được đọc từ tệp

jdbc:mysql://localhost:3306/testdb?useSSL=false
48.

$ sudo service mysql status
mysql start/running, process 5129
9

Một

jdbc:mysql://localhost:3306/testdb?useSSL=false
54 được tạo và các thuộc tính DataSource được đặt.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
0

Một đối tượng kết nối được tạo từ nguồn dữ liệu.

Java mysql nhiều câu lệnh

Có thể thực thi nhiều câu lệnh SQL trong một truy vấn.

jdbc:mysql://localhost:3306/testdb?useSSL=false
57 phải được đặt để bật nhiều câu lệnh trong MySQL.

JdbcMulStat.java

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
1

Trong ví dụ mã, chúng tôi lấy ba hàng từ bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14. Chúng tôi sử dụng ba câu lệnh
jdbc:mysql://localhost:3306/testdb?useSSL=false
59 để có ba hàng.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
2

Chúng tôi kích hoạt nhiều truy vấn câu lệnh trong URL cơ sở dữ liệu bằng cách đặt tham số

jdbc:mysql://localhost:3306/testdb?useSSL=false
57 thành TRUE.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
3

Ở đây chúng tôi có một truy vấn với nhiều tuyên bố. Các tuyên bố được phân tách bằng một dấu chấm phẩy.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
4

Chúng tôi gọi phương thức

jdbc:mysql://localhost:3306/testdb?useSSL=false
61 của đối tượng câu lệnh đã chuẩn bị. Phương thức trả về giá trị boolean cho biết nếu kết quả đầu tiên là đối tượng
jdbc:mysql://localhost:3306/testdb?useSSL=false
06. Các kết quả tiếp theo được gọi bằng phương pháp
jdbc:mysql://localhost:3306/testdb?useSSL=false
63.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
5

Việc xử lý kết quả được thực hiện bên trong vòng

jdbc:mysql://localhost:3306/testdb?useSSL=false
64.
jdbc:mysql://localhost:3306/testdb?useSSL=false
06 được truy xuất với cuộc gọi phương thức
jdbc:mysql://localhost:3306/testdb?useSSL=false
66. Để tìm hiểu nếu có kết quả khác, chúng tôi gọi phương thức
jdbc:mysql://localhost:3306/testdb?useSSL=false
63.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
6

Đây là đầu ra của ví dụ. Ba hàng đầu tiên được lấy từ bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14.

Tiêu đề cột Java MySQL

Ví dụ sau đây cho thấy cách in các tiêu đề cột bằng dữ liệu từ bảng cơ sở dữ liệu. Chúng tôi gọi tên cột là siêu dữ liệu. Siêu dữ liệu là dữ liệu về dữ liệu cốt lõi trong cơ sở dữ liệu.

JdbcColumnHeaders.java

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
7

Trong chương trình này, chúng tôi chọn các tác giả từ bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14 và sách của họ từ bảng
jdbc:mysql://localhost:3306/testdb?useSSL=false
15. Chúng tôi in tên của các cột được trả về trong tập kết quả. Đầu ra được định dạng.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
8

Đây là tuyên bố SQL kết hợp với các tác giả với sách của họ.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
+--------------------+
2 rows in set (0.00 sec)
9

Để có được tên cột, chúng ta cần lấy

jdbc:mysql://localhost:3306/testdb?useSSL=false
71. Nó là một đối tượng có thể được sử dụng để có được thông tin về các loại và thuộc tính của các cột trong một đối tượng
jdbc:mysql://localhost:3306/testdb?useSSL=false
06.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
0

Từ siêu dữ liệu thu được, chúng tôi nhận được tên cột.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
1

Chúng tôi in các tên cột vào bảng điều khiển.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
2

Chúng tôi in dữ liệu vào bảng điều khiển. Cột đầu tiên rộng 21 ký tự và được căn chỉnh bên trái.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
3

Đây là đầu ra của chương trình.

MySQL Java Auto Auto Frostruction Keys

Thuộc tính

jdbc:mysql://localhost:3306/testdb?useSSL=false
73 của MySQL tạo ra một ID duy nhất cho các hàng mới. Ví dụ sau đây cho thấy cách chúng ta có thể sử dụng JDBC để truy xuất giá trị khóa do tự động tạo.

JdbcAutoGenKey.java

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
4

Trong ví dụ, chúng tôi thêm một tác giả mới vào một bảng có khóa chính được tự động tự động bởi MySQL. Chúng tôi lấy ID được tạo.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
5

Bước đầu tiên, chúng ta phải chuyển

jdbc:mysql://localhost:3306/testdb?useSSL=false
74 cho phương pháp
jdbc:mysql://localhost:3306/testdb?useSSL=false
33.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
6

Sau đó, chúng tôi lấy (các) khóa được tạo bằng phương pháp

jdbc:mysql://localhost:3306/testdb?useSSL=false
76.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
7

Vì chúng tôi chỉ có một câu lệnh chèn, chúng tôi sử dụng

jdbc:mysql://localhost:3306/testdb?useSSL=false
77 để điều hướng đến giá trị.

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
8

Đây là một đầu ra mẫu.

Mysql java viết hình ảnh

Một số người thích đưa hình ảnh của họ vào cơ sở dữ liệu, một số người thích giữ chúng trên hệ thống tệp cho các ứng dụng của họ. Khó khăn về kỹ thuật phát sinh khi chúng ta làm việc với nhiều hình ảnh. Hình ảnh là dữ liệu nhị phân. Cơ sở dữ liệu MySQL có một loại dữ liệu đặc biệt để lưu trữ dữ liệu nhị phân được gọi là

jdbc:mysql://localhost:3306/testdb?useSSL=false
78 (đối tượng lớn nhị phân).

Đối với ví dụ này, chúng tôi sử dụng bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
17.

JdbcWriteImage.java

mysql> CREATE DATABASE testdb;
Query OK, 1 row affected (0.02 sec)
9

Trong ví dụ trước, chúng tôi đã đọc một hình ảnh PNG từ thư mục làm việc hiện tại và chèn vào bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
17.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
0

Đây là SQL để chèn một hình ảnh.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
1

Chúng tôi tạo một đối tượng

jdbc:mysql://localhost:3306/testdb?useSSL=false
81 cho tệp hình ảnh. Để đọc các byte từ tệp này, chúng tôi tạo một đối tượng
jdbc:mysql://localhost:3306/testdb?useSSL=false
82.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
2

Luồng nhị phân được đặt thành câu lệnh đã chuẩn bị. Các tham số của phương thức

jdbc:mysql://localhost:3306/testdb?useSSL=false
83 là chỉ mục tham số để liên kết, luồng đầu vào và số byte trong luồng.

jdbc:mysql://localhost:3306/testdb?useSSL=false
9

Chúng tôi thực hiện câu lệnh.

Mysql java đọc hình ảnh

Trong ví dụ trước, chúng tôi đã chèn một hình ảnh vào bảng cơ sở dữ liệu. Bây giờ chúng ta sẽ đọc lại hình ảnh từ bảng.

JdbcReadImage.java

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
4

Chúng tôi đọc một hình ảnh từ bảng hình ảnh.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
5

Chúng tôi chọn một bản ghi từ bảng.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
6

Đối tượng

jdbc:mysql://localhost:3306/testdb?useSSL=false
84 được tạo để ghi vào một tệp. Nó có nghĩa là để viết các luồng của các byte thô như dữ liệu hình ảnh.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
7

Chúng tôi nhận được dữ liệu hình ảnh từ cột

jdbc:mysql://localhost:3306/testdb?useSSL=false
85 bằng cách gọi phương thức
jdbc:mysql://localhost:3306/testdb?useSSL=false
86.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
8

Chúng tôi tìm ra độ dài của dữ liệu Blob. Nói cách khác, chúng tôi nhận được số byte.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';
Query OK, 0 rows affected (0.00 sec)

mysql> USE testdb;
Database changed

mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye
9

Phương pháp

jdbc:mysql://localhost:3306/testdb?useSSL=false
87 lấy tất cả các byte của đối tượng Blob, như một mảng byte.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

0

Các byte được ghi vào luồng đầu ra. Hình ảnh được tạo trên hệ thống tập tin.

Hỗ trợ giao dịch

Một giao dịch là một đơn vị nguyên tử của các hoạt động cơ sở dữ liệu so với dữ liệu trong một hoặc nhiều cơ sở dữ liệu. Hiệu ứng của tất cả các câu lệnh SQL trong một giao dịch có thể được cam kết với cơ sở dữ liệu hoặc tất cả được quay lại.

Cơ sở dữ liệu MySQL có các loại công cụ lưu trữ khác nhau. Phổ biến nhất là các động cơ Myisam và Innodb. Có sự đánh đổi giữa bảo mật dữ liệu và tốc độ cơ sở dữ liệu. Các bảng Myisam nhanh hơn để xử lý và chúng không hỗ trợ các giao dịch. Mặt khác, các bảng InnoDB an toàn hơn so với việc mất dữ liệu. Họ hỗ trợ các giao dịch và chậm hơn để xử lý.

JdbcTransaction.java


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

1

Trong chương trình này, chúng tôi muốn thay đổi tên của tác giả trên hàng đầu tiên của bảng

jdbc:mysql://localhost:3306/testdb?useSSL=false
14. Chúng ta cũng phải thay đổi những cuốn sách liên quan đến tác giả này. Đây là một ví dụ tốt trong đó một giao dịch là cần thiết. Nếu chúng ta thay đổi tác giả và không thay đổi sách của tác giả, dữ liệu sẽ bị hỏng.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

2

Để làm việc với các giao dịch, chúng tôi phải đặt chế độ AutoCommit thành FALSE. Theo mặc định, kết nối cơ sở dữ liệu ở chế độ AutoCommit. Trong chế độ này, mỗi câu lệnh được cam kết vào cơ sở dữ liệu ngay khi nó được thực thi. Một tuyên bố không thể hoàn tác. Khi AutoCommit bị tắt, chúng tôi cam kết các thay đổi bằng cách gọi

jdbc:mysql://localhost:3306/testdb?useSSL=false
89 hoặc cuộn lại bằng cách gọi phương thức
jdbc:mysql://localhost:3306/testdb?useSSL=false
90.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

3

Câu lệnh SQL thứ ba có lỗi. Không có cột Titl trong bảng.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

4

Nếu không có ngoại lệ, giao dịch được cam kết.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

5

Trong trường hợp ngoại lệ, giao dịch được quay lại. Không có thay đổi được cam kết với cơ sở dữ liệu.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

6

Ứng dụng kết thúc với một ngoại lệ.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

7

Giao dịch đã được chuyển trở lại và không có thay đổi nào diễn ra.

Tuy nhiên, không có giao dịch, dữ liệu không an toàn.

JdbcNoTransaction.java


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

8

Chúng tôi có cùng một ví dụ. Lần này, không có hỗ trợ giao dịch.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

9

Một ngoại lệ được ném một lần nữa. Leo Tolstoy đã không viết Martin Eden; dữ liệu là hỏng.

Cập nhật hàng loạt

Khi chúng ta cần cập nhật dữ liệu với nhiều câu lệnh, chúng ta có thể sử dụng các bản cập nhật hàng loạt. Cập nhật hàng loạt có sẵn cho

jdbc:mysql://localhost:3306/testdb?useSSL=false
28,
jdbc:mysql://localhost:3306/testdb?useSSL=false
29,
jdbc:mysql://localhost:3306/testdb?useSSL=false
30, các câu lệnh cũng như cho các câu lệnh
jdbc:mysql://localhost:3306/testdb?useSSL=false
94 và
jdbc:mysql://localhost:3306/testdb?useSSL=false
95.

JdbcBatchUpdate.java

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
0

Đây là một chương trình ví dụ cho một bản cập nhật hàng loạt. Chúng tôi xóa tất cả dữ liệu từ bảng tác giả và chèn dữ liệu mới. Chúng tôi thêm một tác giả mới, Umberto Eco để xem những thay đổi.

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
1

Chúng tôi sử dụng phương thức TEH

jdbc:mysql://localhost:3306/testdb?useSSL=false
96 để thêm một lệnh mới vào câu lệnh.

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
2

Sau khi thêm tất cả các lệnh, chúng tôi gọi

jdbc:mysql://localhost:3306/testdb?useSSL=false
97 để thực hiện cập nhật hàng loạt. Phương thức trả về một loạt các thay đổi cam kết.


    
    4.0.0
    com.zetcode
    AppName
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
    
    
    
        
            mysql
            mysql-connector-java
            5.1.45
            
    
        
    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                1.6.0
                
                    com.zetcode.AppName
                    false
                
            
        
                 

    AppName

4

Cập nhật hàng loạt được cam kết trong một giao dịch.

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
4

Chúng tôi gọi

jdbc:mysql://localhost:3306/testdb?useSSL=false
90 trong trường hợp các bản cập nhật hàng loạt không thành công.

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
5

Chúng tôi thực hiện chương trình

jdbc:mysql://localhost:3306/testdb?useSSL=false
99. Tuyên bố
jdbc:mysql://localhost:3306/testdb?useSSL=false
59 cho thấy bảng
$ sudo apt-get install mysql-server
01 đã được cập nhật thành công. Nó có một tác giả mới, Umerto Eco.

Xuất dữ liệu vào tệp CSV

Ví dụ tiếp theo xuất dữ liệu vào tệp CSV.

Chúng tôi cần có quyền tệp thích hợp cho

$ sudo apt-get install mysql-server
02 của chúng tôi; Nếu không, chúng tôi nhận được thông báo lỗi bị từ chối truy cập.

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
6

Chúng tôi đặt quyền

$ sudo apt-get install mysql-server
03.

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
7

Vì lý do bảo mật, MySQL bắt đầu với tùy chọn

$ sudo apt-get install mysql-server
04 được bật, chỉ cho phép làm việc với các tệp trong một thư mục nhất định. Thư mục được chỉ định trong biến
$ sudo apt-get install mysql-server
05. Trên Windows, đường dẫn giống như
$ sudo apt-get install mysql-server
06.

ExportCSV.java

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
8

Chúng tôi xuất các tác giả và sách tương ứng của họ vào tệp

$ sudo apt-get install mysql-server
07.

package com.zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JdbcMySQLVersion {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
        String user = "testuser";
        String password = "test623";
        
        String query = "SELECT VERSION()";

        try (Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(query)) {

            if (rs.next()) {
                
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            
            Logger lgr = Logger.getLogger(JdbcMySQLVersion.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);
        } 
    }
}
9

Để xuất dữ liệu vào một tệp, chúng tôi sử dụng câu lệnh SQL

$ sudo apt-get install mysql-server
08.

String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false";
0

Chúng tôi xác minh dữ liệu.

Đây là hướng dẫn Java MySQL. Bạn cũng có thể quan tâm đến hướng dẫn của JDBI, hướng dẫn Java H2, Hướng dẫn Java PostgreSQL, Hướng dẫn Java MongoDB hoặc hướng dẫn MySQL.

Java có được sử dụng trong MySQL không?

Trong Java, chúng tôi có thể kết nối với cơ sở dữ liệu của mình (MySQL) với JDBC (kết nối cơ sở dữ liệu Java) thông qua mã Java. JDBC là một trong những API tiêu chuẩn cho kết nối cơ sở dữ liệu, sử dụng nó, chúng tôi có thể dễ dàng chạy truy vấn, câu lệnh và cũng tìm nạp dữ liệu từ cơ sở dữ liệu.we can connect to our database(MySQL) with JDBC(Java Database Connectivity) through the Java code. JDBC is one of the standard APIs for database connectivity, using it we can easily run our query, statement, and also fetch data from the database.

MySQL được viết bằng ngôn ngữ nào?

MySQL được viết bằng C và C ++.Trình phân tích cú pháp SQL của nó được viết bằng YACC, nhưng nó sử dụng máy phân tích từ vựng được sản xuất tại nhà.C and C++. Its SQL parser is written in yacc, but it uses a home-brewed lexical analyzer.

SQL có dựa trên Java không?

Mô tả SQL.Cung cấp API để truy cập và xử lý dữ liệu được lưu trữ trong nguồn dữ liệu (thường là cơ sở dữ liệu quan hệ) bằng ngôn ngữ lập trình JAVATM.API này bao gồm một khung, theo đó các trình điều khiển khác nhau có thể được cài đặt động để truy cập các nguồn dữ liệu khác nhau.Provides the API for accessing and processing data stored in a data source (usually a relational database) using the JavaTM programming language. This API includes a framework whereby different drivers can be installed dynamically to access different data sources.

SQL có phải là một phần của Java không?

Tiện ích mở rộng ngôn ngữ Java là một tính năng của SQL Server được sử dụng để thực hiện mã Java bên ngoài.Dữ liệu quan hệ có thể được sử dụng trong mã Java bên ngoài bằng khung mở rộng.Phần mở rộng ngôn ngữ Java là một phần của phần mở rộng ngôn ngữ SQL Server.. The relational data can be used in the external Java code using the extensibility framework. The Java Language Extension is part of SQL Server Language Extensions.