0

Javaコードを使用して画像を挿入しようとしています。画像を挿入できますが、テーブルにジャンク値が表示
されます。テーブルを作成するためのコードです。

try {
    Connection con = null;
    Class.forName("com.mysql.jdbc.Driver");
    con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306 /Hotel",
           "root", "root");
      try {
        Statement st = con.createStatement();
        String table = "CREATE TABLE ItemMenu(Image MEDIUMBLOB,
          Item_Codevarchar(20),Item_Name varchar(20),
          Item_Category varchar(20),Sub_Category varchar(20),
          Item_Rate varchar(20),Item_Kitchen varchar(20),
          Item_Division varchar(20),Item_Description varchar(20))";
      st.executeUpdate(table);
    } catch (SQLException s) {
        System.out.println("Table all ready exists!");
    }
    con.close();
} catch (Exception e) {
    e.printStackTrace();
}    

テーブルに値を挿入するためのコード..

try {
    File f = new File(path);
    System.out.print(path);
    Connection con = null;
    Class.forName("com.mysql.jdbc.Driver");
    con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/Hotel", "root", "root123");

//テキストフィールドから値を取得して文字列に格納するコードは次のとおりです。

try {
        FileInputStream fis = new FileInputStream(f);
        System.out.println("hello how r u");
        String itemcode = itemcodefield.getText();
        String itemname = itemnamefield.getText();
        String categoryboxname = (String) categorybox.getSelectedItem();
        String subcategoryboxname = (String) subcategorybox.getSelectedItem();
        String rate = ratefield.getText();
        String kitchenboxname = (String) kitchenbox.getSelectedItem();
        String divisionboxname = (String) divisionbox.getSelectedItem();
        String description = descriptionfield.getText();
        String insert = "INSERT INTO ItemMenu(Image,Item_Code,
        Item_Name,Item_Category,Sub_Category,Item_Rate,Item_Kitchen,
        Item_Division,Item_Description)" 
        + "VALUES (?,?,?,?,?,?,?,?,?)";
        System.out.println("am fyn");

//これは、mysql テーブル内にその値を挿入する prepardstatemnt のコードです。

        PreparedStatement preparedStmt = con.prepareStatement(insert);
        preparedStmt.setBinaryStream(1, (InputStream) f(int)
        (f.length()
        ));            
        preparedStmt.setString(2, itemcode);
        preparedStmt.setString(3, itemname);
        preparedStmt.setString(4, categoryboxname);
        preparedStmt.setString(5, subcategoryboxname);
        preparedStmt.setString(6, rate);
        preparedStmt.setString(7, kitchenboxname);
        preparedStmt.setString(8, divisionboxname);
        preparedStmt.setString(9, description);
        preparedStmt.execute();
    } catch (SQLException s) {
    }
    con.close();
} (Exception e1){
    e1.printStackTrace();
}
4

2 に答える 2

4

アプリケーションの設計はわかりませんが、一般的にはinstead of inserting images、DB にイメージをフォルダーにinsert path保存し、DB 内のそのフォルダーに保存することをお勧めします。

画像の挿入はパフォーマンスの問題になります。パスを挿入すると DB サイズも削減され、他のリソースへのアクセスも高速になります。

于 2012-11-14T05:55:56.003 に答える
0

setBinaryStream メソッドの第 2 引数に FileInputStream オブジェクトを使用します。それは機能しますが、画像をフォルダーに保存し、そのフォルダーへのパスをDBに挿入します。サーバー側でアップロード画像を処理する良い方法です。

 PreparedStatement preparedStmt = con.prepareStatement(insert);
        preparedStmt.setBinaryStream(1, (InputStream)fis, (int)(f.length()));            
        preparedStmt.setString(2, itemcode);
        preparedStmt.setString(3, itemname);
        preparedStmt.setString(4, categoryboxname);
        preparedStmt.setString(5, subcategoryboxname);
        preparedStmt.setString(6, rate);
        preparedStmt.setString(7, kitchenboxname);
        preparedStmt.setString(8, divisionboxname);
        preparedStmt.setString(9, description);
        preparedStmt.execute();
    } catch (SQLException s) {
    }
    con.close();
} (Exception e1){
    e1.printStackTrace();
}
于 2012-11-14T06:30:06.033 に答える