1 はじめに データベースを設計する場合、画像や音声ファイルをデータベースに挿入することは避けられません。一般的に言えば、ファイル自体ではなく、画像ファイルの対応する保存場所を挿入することで、データベースに直接挿入する手間を回避できます。しかし、場合によっては、MySQL に画像を挿入する方が管理しやすいこともあります。では、MySQL にどのように保存するのでしょうか? 参考文献[1]にはかなり明確な例が含まれていますが、これはMySQLのグラフィカルクエリツールQuery Browerに基づいています。マシンにインストールされていない場合は、よく理解できない可能性があります。ここでは詳細には触れませんので、詳しい情報については提供されているリンクを参照してください。 さらに、[1]の例はQuery Browerの使いやすさとパワーを示しているだけであり、私たちの開発ではあまり実用的ではありません。それでは、JAVA を使用して MySQL にデータを保存する簡単な例を書いてみましょう。 2 テーブルを作成する まず、データベースにテーブルを作成する必要があります。 test というデータベースに pic というテーブルを作成しました。表には、idpic、caption、img の 3 つの列が含まれます。このうち、idpic は主キー、caption は画像の説明、img は画像ファイルそのものです。テーブルを作成するための SQL ステートメントは次のとおりです。 `test`.`pic` が存在する場合はテーブルを削除します。 テーブル `test`.`pic` を作成します ( `idpic` int(11) NOT NULL auto_increment, `caption` varchar(45) NOT NULL デフォルト '' `img` longblob NULLではありません、 主キー (`idpic`) )ENGINE=InnoDB デフォルト文字セット=utf8; 上記のステートメントをコマンドラインに入力し(クエリブラウザがインストールされている場合は、参考文献[1]の指示に従ってテーブルを作成すると便利です)、実行すると、テーブルが正常に作成されます。 3 画像ストレージクラスの実装 テーブルが完成したら、データベースに画像を挿入する操作を完了するための Java クラスの作成を開始します。 Java とデータベースの接続は、JDBC ドライバーを通じて実現されることがわかっています。 MySQL の Web サイトで提供されている MySQL Connector/J を使用します。別の種類のドライバーを使用する場合は、以下の実装に若干の違いがある可能性があります。 3.1 JDBCドライバをロードして接続を確立する JDK で提供される DriverManager インターフェイスは、Java アプリケーションと JDBC ドライバー間の接続を管理するために使用されます。このインターフェースを使用する前に、DriverManager は接続する JDBC ドライバーを認識している必要があります。最も簡単な方法は、Class.forName() を使用して、java.sql.Driver を実装するインターフェース クラスを DriverManager に登録することです。 MySQL Connector/J の場合、クラス名は com.mysql.jdbc.Driver です。 次の簡単な例は、Connector/J ドライバーを登録する方法を示しています。 java.sql.Connection をインポートします。 java.sql.DriverManager をインポートします。 java.sql.SQLException をインポートします。 パブリッククラス LoadDriver { パブリック静的voidメイン(String[] args) { 試す { // newInstance() 呼び出しは、いくつかの回避策です // 壊れた Java 実装 クラス.forName("com.mysql.jdbc.Driver").newInstance(); // 接続 con = DriverManager.getConnection(……) // ... } catch (例外例) { // エラーを処理する } } ドライバーを DriverManager に登録した後、 3.2 準備されたステートメント 上記の手順を完了すると、確立された接続を介して Statement インターフェイス クラスを作成し、いくつかの SQL ステートメントを実行できます。次の例では、いくつかのストアド プロシージャと関数を実行できる PreparedStatement と CallableStatement を使用していますが、ここではそれらについては説明しません。次のコード スニペットは、pic テーブルにレコードを挿入します。ここで、(1) Connection インターフェースのオブジェクト con は、prepareStatement メソッドを呼び出して、プリコンパイルされた SQL ステートメントを取得します。(2) 挿入ステートメントの最初の疑問符に値を割り当て、(3) 2 番目に値を割り当て、(4) 3 番目に値を割り当てます。このステップは最も注目に値します。使用されるメソッドは setBinaryStream() です。最初のパラメータ 3 は 3 番目の疑問符を参照し、fis はバイナリ ファイル ストリーム、3 番目のパラメータはファイル ストリームの長さです。 準備されたステートメント ps; … ps = con.prepareStatement("PIC値に挿入する (?,?,?)"); // (1) ps.setInt(1, id); //(2) ps.setString(2, file.getName()); (3) ps.setBinaryStream(3, fis, (int)file.length()); (4) ps.executeUpdate(); … 3.3 完全なコード 完全なコードは上記に記載されています。 パッケージ com.forrest.storepic; java.io.File をインポートします。 java.io.FileInputStream をインポートします。 java.sql.Connection をインポートします。 java.sql.DriverManager をインポートします。 java.sql.PreparedStatement をインポートします。 java.sql.ResultSet をインポートします。 java.sql.SQLException をインポートします。 /** * このクラスでは、画像ファイルを MySQL に保存する方法について説明します。 * @author ヤンジャン・チェン * @バージョン 1.0 2006 年 1 月 2 日 */ パブリッククラスStorePictures { プライベート文字列 dbDriver; プライベート文字列 dbURL; プライベート文字列 dbUser; プライベート文字列 dbPassword; プライベート接続con; プライベート PreparedStatement ps; パブリックStorePictures() { dbDriver = "com.mysql.jdbc.Driver"; dbURL = "jdbc:mysql://localhost:3306/test"; dbUser = "root"; dbPassword = "admin"; 初期化DB(); } パブリックStorePictures(文字列strDriver、文字列strURL、 文字列 strUser、文字列 strPwd) { dbDriver = strDriver; dbURL = strURL; dbUser = strUser; dbPassword = strPwd; 初期化DB(); } パブリックボイドinitDB() { 試す { // ドライバーをロード クラス.forName(dbDriver).newInstance(); // 接続を取得 con = DriverManager.getConnection(dbURL, dbUser、dbPassword); } キャッチ(ClassNotFoundException e) { System.out.println(e.getMessage()); } キャッチ(SQLException ex) { // エラーを処理する System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("ベンダーエラー: " + ex.getErrorCode()); } キャッチ (例外 e) { System.out.println(e.getMessage()); } } パブリックブールストアImg(String strFile)は例外をスローします{ ブール値が false と書かれています。 (con == null)の場合 記述 = false; それ以外 { 整数ID = 0; ファイル file = new File(strFile); FileInputStream fis = 新しい FileInputStream(file); 試す { ps = con.prepareStatement("PICからMAX(idpic)を選択"); 結果セット rs = ps.executeQuery(); if(rs != null) { while(rs.next()) { id = rs.getInt(1)+1; } } それ以外 { 書面で返却する。 } ps = con.prepareStatement("挿入" + "PIC値(?、?、?)に"); ps.setInt(1, ID); ps.setString(2, file.getName()); ps.setBinaryStream(3, fis, (int) ファイル.length()); ps.executeUpdate(); 記述 = true; } キャッチ (SQLException e) { 記述 = false; System.out.println("SQLException: " + e.getMessage(); System.out.println("SQLState: " + e.getSQLState(); System.out.println("ベンダーエラー: " + e.getErrorCode()); e.printStackTrace(); ついに ps.close(); fis.close(); // DB接続を閉じる con.close(); } } 書面で返却する。 } /** * プログラムの開始点 * @param args CMD 行 */ パブリック静的voidメイン(String[] args) { 引数の長さが 1 ではない場合 System.err.println("java StorePictures ファイル名"); システム終了(1); } ブールフラグ = false; ストアピクチャ sp = 新しいストアピクチャ(); 試す { フラグ = sp.storeImg(args[0]); } キャッチ (例外 e) { e.printStackTrace(); } if(フラグ) { System.out.println("画像のアップロードが成功しました。"); } それ以外 { System.out.println("画像のアップロードに失敗しました。"); } } } 4 結論 ここまでで、MySQL に画像を保存するプロセス全体を紹介しました。この例は最も単純なものです。読者は実際のニーズに応じて、ファイルの読み取り、削除などの他の機能を追加して、プログラム全体をより完璧にすることができます。本稿執筆にあたり、主に文献[2]を参考にさせていただきました。ここに感謝申し上げます。参考文献[3]は非常に美しい例であり、保存だけでなく読み取りも可能で、非常に直感的なグラフィカルインターフェイスを備えています。興味のある方は、詳しく研究することができます。 以上が、私がご紹介したMySQLで写真を保存する方法です。お役に立てれば幸いです。ご質問があれば、メッセージを残していただければ、すぐに返信させていただきます。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: Hyper-V の紹介とインストールと使用 (詳細な図解)
>>: H5 WeChatパブリックアカウント認証を実装するための簡単な手順
この記事の例では、Appleの電卓を実装するためのJSの具体的なコードを参考までに共有しています。具...
ステップ1: MySQLでbinlogが有効になっていることを確認する '%log_bin%...
この記事では、フォームデータの非同期送信を実装するためのJavaScriptの具体的なコードを参考ま...
開発環境では、vue プロジェクトは、ローカルで Express サーバーを構築することをベースにし...
目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...
MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...
計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...
目次安定導入手ぶれ補正シーン1(マウスの動き込み)手ぶれ補正シーン2(キーボードのキー)関数のスロッ...
現在、CentOS の最新バージョンは CentOS 8 です。次に、CentOS Linux 8....
esインストール docker pull elasticsearch:7.4.0 # -d : バッ...
1. Apacheをインストールする # yum インストール -y httpd httpd-de...
学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...
1. IEブラウザモードハックロゴ1. CSSハックロゴコードをコピーコードは次のとおりです。 ie...
目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...
接続は、実際の外部キー(人工的に作成された 2 つのテーブル間の対応関係を指します。対照的に、FOR...