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パブリックアカウント認証を実装するための簡単な手順
1. 仮想マシンに共有フォルダを設定します。 1. 処理する仮想マシンを選択し、右クリックして設定...
携帯モバイル ページは Chrome および Safari とのみ互換性があればよいため、カスタム ...
Docker には多くのログ プラグインがあります。デフォルトでは json-file を使用します...
目次docker システム df docker システム プルーンNoneオブジェクトをクリーンアッ...
今日から、定期的にちょっとした豆知識を整理していきます。簡単なものもあるかもしれませんが、どれも役に...
目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...
目次1. 百度百科事典1. MySQL 2. PostgreSQL 3. MySQL に対する Po...
電話Amap API を呼び出す方法は? Amap が https://lbs.amap.com/a...
このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...
序文前回の記事ではNode.jsのインストールと設定を紹介しました。今回はVScodeでbableを...
1. レビューMySQL の起動後にバッファ プールが初期化されます。バッファ プールは N 個の空...
プロジェクトでよくある状況として、案件リストなどのリストが存在することがあります。リスト内の項目をク...
dockerfile またはコンテナ内で yum を実行すると、エラーが報告され、ソースが見つかりま...
目次必要:アイデア:レッスン:テキストを共有する:要約する必要:インターフェイスからサブメニュー デ...
序文Vuex を使用すると、ストア内に「ゲッター」を定義できます (これはストアの計算されたプロパテ...