집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에 그림을 삽입하는 방법
mysql에 그림을 삽입하는 방법: 먼저 데이터베이스에 테이블을 만든 다음 JDBC 드라이버를 로드하고 연결을 설정합니다. 마지막으로 SQL 문을 실행하기 위한 명령문 인터페이스 클래스를 만듭니다.
mysql에 그림을 삽입하는 방법:
1 먼저 데이터베이스에 테이블을 만듭니다. test라는 데이터베이스 아래에 pic이라는 테이블을 만들었습니다. 테이블에는 idpic, caption 및 img의 3개 열이 포함됩니다. 그 중 idpic은 기본키이고, caption은 사진에 대한 설명, img는 이미지 파일 자체입니다. 테이블을 생성하는 SQL 문은 다음과 같습니다.
DROP TABLE IF EXISTS `test`.`pic`; CREATE TABLE `test`.`pic` ( `idpic` int(11) NOT NULL auto_increment, `caption` varchar(45) NOT NULL default '', `img` longblob NOT NULL, PRIMARY KEY (`idpic`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
위의 명령문을 명령줄에 입력합니다(쿼리 브라우저가 설치된 경우 참고 [1]의 지침에 따라 테이블을 생성하면 더 편리합니다. ), 실행, 테이블 빌드가 성공적으로 완료되었습니다.
2. 이미지 저장 클래스 구현
테이블이 완성되면 데이터베이스에 이미지를 삽입하는 작업을 완료하기 위해 Java 클래스 작성을 시작합니다. 우리는 Java와 데이터베이스 간의 연결이 JDBC 드라이버를 통해 이루어진다는 것을 알고 있습니다. 저는 MySQL 홈페이지에서 제공하는 MySQL Connector/J를 사용하고 있습니다. 다른 종류의 드라이버를 사용하는 경우에는 다음 구현 과정에서 약간의 차이가 있을 수 있습니다.
2.1.JDBC 드라이버 로드 및 연결
JDK에서 제공하는 DriverManager 인터페이스는 Java 애플리케이션과 JDBC 드라이버 간의 연결을 관리하는 데 사용됩니다. 이 인터페이스를 사용하기 전에 DriverManager는 연결하려는 JDBC 드라이버를 알아야 합니다. 가장 간단한 방법은 Class.forName()을 사용하여 java.sql.Driver를 구현하는 인터페이스 클래스를 DriverManager에 등록하는 것입니다. MySQL Connector/J의 경우 이 클래스의 이름은 com.mysql.jdbc.Driver입니다.
다음의 간단한 예에서는 Connector/J Driver를 등록하는 방법을 보여줍니다.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class LoadDriver { public static void main(String[] args) { try { // The newInstance() call is a work around for some // broken Java implementations Class.forName("com.mysql.jdbc.Driver").newInstance(); // Connection con = DriverManager.getConnection(……) // …… } catch (Exception ex) { // handle the error } }
DriverManager에 드라이버를 등록한 후 DriverManager.getConnection() 메서드를 호출하여 데이터베이스에 대한 연결을 얻을 수 있습니다. 실제로 위의 예에는 이 문이 존재하지만 주석 처리되었습니다. 이후 구현에는 완전한 예가 있습니다.
2.2.PreparedStatement
위의 단계를 완료한 후, 설정된 연결을 통해 SQL 문을 실행하는 State 인터페이스 클래스를 생성할 수 있습니다. 다음 예에서는 일부 저장 프로시저와 함수를 실행할 수 있는 ReadyStatement 및 CallableStatement를 사용합니다. 여기서는 자세히 설명하지 않겠습니다.
다음 코드 조각은 pic 테이블에 레코드를 삽입합니다. 그중 (1)에서 Connection 인터페이스의 객체 con은 prepareStatement 메소드를 호출하여 미리 컴파일된 SQL 문(미리 컴파일된 SQL 문)을 가져옵니다. (2)는 insert 문의 첫 번째 물음표를 할당합니다. 는 두 번째 할당입니다. (4)는 세 번째 단계입니다. 사용된 메서드는 setBinaryStream()입니다. 첫 번째 매개변수 3은 바이너리 파일 스트림을 나타냅니다. 세 번째 매개변수는 이 파일 스트림의 길이입니다.
PreparedStatement ps; … ps = con.prepareStatement("insert into PIC values (?,?,?)"); // (1) ps.setInt(1, id); //(2) ps.setString(2, file.getName()); (3) ps.setBinaryStream(3, fis, (int)file.length()); (4) ps.executeUpdate(); …
2.3, 전체 코드
전체 코드는 위에 나열되어 있습니다.
package com.forrest.storepic; import java.io.File; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * This class describes how to store picture file into MySQL. * @author Yanjiang Qian * @version 1.0 Jan-02-2006 */ public class StorePictures { private String dbDriver; private String dbURL; private String dbUser; private String dbPassword; private Connection con; private PreparedStatement ps; public StorePictures() { dbDriver = "com.mysql.jdbc.Driver"; dbURL = "jdbc:mysql://localhost:3306/test"; dbUser = "root"; dbPassword = "admin"; initDB(); } public StorePictures(String strDriver, String strURL, String strUser, String strPwd) { dbDriver = strDriver; dbURL = strURL; dbUser = strUser; dbPassword = strPwd; initDB(); } public void initDB() { try { // Load Driver Class.forName(dbDriver).newInstance(); // Get connection con = DriverManager.getConnection(dbURL, dbUser, dbPassword); } catch(ClassNotFoundException e) { System.out.println(e.getMessage()); } catch(SQLException ex) { // handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } catch (Exception e) { System.out.println(e.getMessage()); } } public boolean storeImg(String strFile) throws Exception { boolean written = false; if (con == null) written = false; else { int id = 0; File file = new File(strFile); FileInputStream fis = new FileInputStream(file); try { ps = con.prepareStatement("SELECT MAX(idpic) FROM PIC"); ResultSet rs = ps.executeQuery(); if(rs != null) { while(rs.next()) { id = rs.getInt(1)+1; } } else { return written; } ps = con.prepareStatement("insert " + "into PIC values (?,?,?)"); ps.setInt(1, id); ps.setString(2, file.getName()); ps.setBinaryStream(3, fis, (int) file.length()); ps.executeUpdate(); written = true; } catch (SQLException e) { written = false; System.out.println("SQLException: " + e.getMessage()); System.out.println("SQLState: " + e.getSQLState()); System.out.println("VendorError: " + e.getErrorCode()); e.printStackTrace(); } finally { ps.close(); fis.close(); // close db con con.close(); } } return written; } /** * Start point of the program * @param args CMD line */ public static void main(String[] args) { if(args.length != 1) { System.err.println("java StorePictures filename"); System.exit(1); } boolean flag = false; StorePictures sp = new StorePictures(); try { flag = sp.storeImg(args[0]); } catch (Exception e) { e.printStackTrace(); } if(flag) { System.out.println("Picture uploading is successful."); } else { System.out.println("Picture uploading is failed."); } } }
더 많은 관련 무료 학습 권장 사항: mysql 튜토리얼(동영상)
위 내용은 MySQL에 그림을 삽입하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!