mysql に画像を挿入する方法: まずデータベースにテーブルを作成し、次に JDBC ドライバーをロードして接続を確立し、最後に SQL ステートメントを実行するための Statement インターフェイス クラスを作成します。
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 Web サイトで提供されている 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
上記の手順を完了すると、確立された接続を通じて Statement インターフェイス クラスを作成し、いくつかの SQL ステートメントを実行できます。次の例では、いくつかのストアド プロシージャと関数を実行できる PreparedStatement と CallableStatement を使用していますが、ここでは詳細は説明しません。
次のコード スニペットは、pic テーブルにレコードを挿入します。このうち、(1)のConnectionインタフェースのオブジェクトconは、prepareStatementメソッドを呼び出してプリコンパイル済みのSQL文(プリコンパイル済みSQL文)を取得、(2)は挿入文の最初の疑問符の代入、(3)は、は 2 番目の割り当てです。 , (4) は 3 番目の割り当てです。このステップも言及することが最も重要です。使用されるメソッドは setBinaryStream() です。最初のパラメータ 3 は 3 番目の疑問符を参照します。fis はバイナリ ファイル ストリームです。 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 中国語 Web サイトの他の関連記事を参照してください。