Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để chèn hình ảnh trong Cơ sở dữ liệu bằng JDBC?

setBinaryStream () phương pháp của Câu lệnh chuẩn bị giao diện chấp nhận một số nguyên đại diện cho chỉ số của tham số và một đối tượng InputStream và đặt tham số cho đối tượng InputStream đã cho. Bất cứ khi nào bạn cần gửi giá trị nhị phân rất lớn, bạn có thể sử dụng phương pháp này.

Và cơ sở dữ liệu SQL cung cấp kiểu dữ liệu có tên Blob (Đối tượng lớn nhị phân), trong đó bạn có thể lưu trữ dữ liệu nhị phân lớn như hình ảnh.

Lưu trữ hình ảnh bằng JDBC

Nếu bạn cần lưu trữ hình ảnh trong cơ sở dữ liệu bằng chương trình JDBC, hãy tạo một bảng với kiểu dữ liệu Blob như hình dưới đây:

CREATE TABLE Tutorial(Name VARCHAR(255), Type INT NOT NULL, Logo BLOB);

Bây giờ, bằng cách sử dụng JDBC, hãy kết nối với cơ sở dữ liệu và chuẩn bị Chuẩn bị sẵn sàng để chèn các giá trị vào bảng đã tạo ở trên:

String query = "INSERT INTO Tutorial(Name, Type, Logo) VALUES (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);

Đặt giá trị cho trình giữ chỗ bằng cách sử dụng các phương thức setter của giao diện PreparedStatement và cho giá trị đặt kiểu dữ liệu Blob bằng phương thức setBinaryStream ().

FileInputStream fin = new FileInputStream("javafx_logo.jpg");

pstmt.setBinaryStream(3, fin);

Ví dụ

Sau đây là một ví dụ minh họa cách chèn hình ảnh vào cơ sở dữ liệu MySQL bằng chương trình JDBC. Ở đây, chúng tôi đang tạo một bảng với kiểu dữ liệu blob được chèn các giá trị vào bảng ( BinaryStream đối tượng với kiểu đốm màu) và truy xuất nội dung của bảng.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertingImageToDatabase {
   public static void main(String args[]) throws Exception {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating the Statement
      Statement stmt = con.createStatement();
      //Executing the statement
      String createTable = "CREATE TABLE Tutorial( "
         + "Name VARCHAR(255), "
         + "Type VARCHAR(50), "
         + "Logo BLOB)";
      stmt.execute(createTable);
      //Inserting values
      String query = "INSERT INTO Tutorial(Name, Type, Logo) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "JavaFX");
      pstmt.setString(2, "Java_library");
      FileInputStream fin = new FileInputStream("E:\\images\\javafx_logo.jpg");
      pstmt.setBinaryStream(3, fin);
      pstmt.execute();

      pstmt.setString(1, "CoffeeScript");
      pstmt.setString(2, "scripting Language");
      fin = new FileInputStream("E:\\images\\coffeescript_logo.jpg");
      pstmt.setBinaryStream(3, fin);
      pstmt.execute();
      pstmt.setString(1, "Cassandra");
      pstmt.setString(2, "NoSQL database");
      fin = new FileInputStream("E:\\images\\cassandra_logo.jpg");
      pstmt.setBinaryStream(3, fin);
      pstmt.execute();
      System.out.println("Data inserted");
      ResultSet rs = stmt.executeQuery("Select *from Tutorial");
      while(rs.next()) {
         System.out.print("Name: "+rs.getString("Name")+", ");
         System.out.print("Tutorial Type: "+rs.getString("Type")+", ");
         System.out.print("Logo: "+rs.getBlob("Logo"));
         System.out.println();
      }
   }
}

Đầu ra

Connection established......
Data inserted
Name: JavaFX, Tutorial Type: Java_library, Logo: com.mysql.jdbc.Blob@7dc5e7b4
Name: CoffeeScript, Tutorial Type: scripting Language, Logo:
com.mysql.jdbc.Blob@1ee0005
Name: Cassandra, Tutorial Type: NoSQL database, Logo: com.mysql.jdbc.Blob@75a1cd57

Lưu ý: Bạn chỉ có thể lưu trữ và truy xuất loại hình ảnh .gif hoặc .jpeg hoặc .png bằng chương trình JDBC.