1

私は netbeans と mySQL を使用して製品を作成しています。ボタンがクリックされたときにファイルチューザーを使用して、ユーザーから画像を取得しました。次に例を示します。

public void handle(ActionEvent event){
     FileChooser fileChooser = new FileChooser();

        //Set extension filter
        FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
        FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
        fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);

        //Show open file dialog
        File file = fileChooser.showOpenDialog(null);

        try {
            BufferedImage bufferedImage = ImageIO.read(file);
            WritableImage image = SwingFXUtils.toFXImage(bufferedImage, null);
            myImageView.setImage(image);
        } catch (IOException ex) {
            Logger.getLogger(CreateProductUI.class.getName()).log(Level.SEVERE, null, ex);
        }
}

そして、以下のコードを使用して画像を表示します。

Image image = panel.getMyImageView().getImage();

イメージをデータベースに挿入しようとするまでは正常に動作します。これは私のコンストラクターであり、メソッドを作成します:

public Product(String name,String desc,double price, int quantity,String datestr,Image image){
    this.name = name;
    this.desc = desc;
    this.price = price;
    this.quantity = quantity;
    this.datestr = datestr;
    this.image = image;
}

public boolean create(){
    boolean success = false;
    DBController db = new DBController();
    String dbQuery; 
    db.getConnection();     

    dbQuery = "INSERT INTO sm_product(productName,productDescription,productPrice,productQuantity,dateOfCreation,productStatus,productImage) VALUES ('" + name + "', '" + desc + "', " + price + ", " + quantity + ",'" + datestr + "', 'Available', '" + image + "')";

    if (db.updateRequest(dbQuery) == 1){
        success = true;
    }
    db.terminate();
    return success;
}

ただし、画像は「javafx.scene.image.WritableImage@3a6e48b3」として保存されました。同じ画像で2回試しましたがアドレスが違いました。画像を間違った方法で保存しているのだろうか?まだ試していないため、select SQL ステートメントを使用して画像を取得できるかどうかはわかりませんが、機能しないと思います。

データベースに保存されている画像は非常に奇妙で、間違っている可能性があるため、誰もがそれを解決するより良い方法を持っています。

前もって感謝します。

更新部分

public void getConnection(){ 
    String url = ""; 
    try { 
        //url = "jdbc:mysql://172.20.133.227/test"; 
        url = "jdbc:mysql://localhost/amkcc"; 
        con = DriverManager.getConnection(url, "root", "root"); 
        System.out.println("Successfully connected to " + url+ "."); 
    } 
    catch (java.sql.SQLException e) { 
        System.out.println("Connection failed ->"+ url); 
        System.out.println(e); 
    } 
} 
4

1 に答える 1

-1

JDBC を使用して MySQL に画像を保存する方法の例:

File image = new File("C:/image.jpg");
psmnt = connection.prepareStatement
  ("insert into save_image(name, city, image, Phone) "+ "values(?,?,?,?)");
psmnt.setString(1,"MyName");
psmnt.setString(2,"MyCity");
psmnt.setString(4,"123456");
FileInputStream fis = new FileInputStream(image);
psmnt.setBinaryStream(3, (InputStream)fis, (int)(image.length()));
int s = psmnt.executeUpdate();

メソッドは次のようになります。

public boolean create(){
 boolean success = false;
 try{
 DBController db = new DBController();
 String dbQuery; 
 db.getConnection();     

 dbQuery = "INSERT INTO sm_product(productName,productDescription,productPrice,productQuantity,dateOfCreation,productStatus,productImage) VALUES (?,?,?,?, ?, 'Available', ?)";

 PreparedStatement psmnt = db.getConnection().prepareStatement(dbQuery);
 psmnt.setString(1,name);
 psmnt.setString(2, desc);
 psmnt.setDouble(3, price);
 psmnt.setInt(4, quantity);
 psmnt.setString(5, dateStr);

 File imageFile = new File("test.png");
 RenderedImage renderedImage = SwingFXUtils.fromFXImage(image, null);
 ImageIO.write(renderedImage, "png", imageFile); //Change extension appropriately
 FileInputStream fis = new FileInputStream(imageFile);
 psmnt.setBinaryStream(3, (InputStream)fis, (int)(imageFile.length()));
 int s = psmnt.executeUpdate();

 //check the value of s and initialize success appropriately

 return success;
 }catch(Exception e) { e.printStackTrace(); }
   return false;

}

「DBController」のgetConnection()メソッドは次のようになります。

public Connection getConnection(){ 
            if(con != null) return con;
    String url = ""; 
    try { 
        //url = "jdbc:mysql://172.20.133.227/test"; 
        url = "jdbc:mysql://localhost/amkcc"; 
        con = DriverManager.getConnection(url, "root", "root"); 
        System.out.println("Successfully connected to " + url+ "."); 
                    return con;
    } 
    catch (java.sql.SQLException e) { 
        System.out.println("Connection failed ->"+ url); 
        System.out.println(e); 
    } 
            return null;
} 
于 2013-06-19T13:51:43.560 に答える