2013-06-19 2 views
1

Я делаю создание продукта с помощью netbeans и mySQL. Я использовал выбора файлов, чтобы получить изображение от пользователя при нажатии на кнопки, например:Вставить изображение в 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; 
} 

Однако образ был сохранен как «[email protected]». Я пробовал дважды с тем же изображением, но адрес был другим. Интересно, я неправильно хранил изображение? Я не уверен, могу ли я получить изображение, используя команду 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); 
    } 
} 
+0

Чтобы сохранить blob, вам необходимо передать 'byte []' в качестве параметра. вам нужно будет выяснить, как построить это из существующего кода – DevZer0

+0

что такое blob? также как использовать байт [] –

+0

, если вы используете немного google, я уверен, что вы можете найти ответы. – DevZer0

ответ

-1

Пример того, как сохранять изображения в MySQL с использованием JDBC:

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; 

} 

Метод getConnection() в «DBController» должен b e нравится:

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; 
} 
+0

Но я получаю файл от пользователя, поэтому я не знаю точное местоположение для изображения. –

+0

Это не я. Моих голосов все еще недостаточно. Это какой-то другой пользователь. Каков ваш класс связи? Спасибо –

+0

правда, я этого не осознавал. Кстати, объект 'connection' должен быть извлечен из вашего класса' DBController', возможно, что-то вроде 'db.getConnection()' – Mubin

Смежные вопросы