首页 > 解决方案 > 如何将 fileStream 转换为 blob 以将其添加到 sql 表中?

问题描述

我的数据库是这样的: id(int),nomTournoi(varchar),nbr_equipe(int),dateTournoi(date),terrainTournoi(varchar),image(blob) 我尝试将图像添加到我的表中,但我无法获得如何将文件转换为 blob 我尝试将其转换为 fileInputStream 但如果有人能给我提示如何做到这一点,这是我在 doc.java 中的函数

public void ajouterTournoi(Tournoi t) {
    try {
    String requete = "INSERT INTO tournoi (nomTournoi,nbr_equipe,dateTournoi,terrainTournoi,image)"
    + "VALUES ('"+t.getNomTournoi()+"','"+t.getNbr_equipe()+"','"+t.getDateTournoi()+"','"+t.getTerrainTournoi()+"','"+t.getImage()+"')";
        Statement st = MyConnection.getInstance().getCnx()
                .createStatement();
        st.executeUpdate(requete);
        System.out.println("Tournoi ajoutée");
        
    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }

}

这是控制器上的功能

private void ajouterTournoi(ActionEvent event) {

        /// SAUVEGARDE DANS LA BD
        String nomT = nomTournoi.getText();
        String nomTerrain = terrain.getValue();
        Integer nbr_Equipe = nbrEquipe.getValue();
        LocalDate dateT = dateTournoi.getValue();
        try {
        FileChooser fc = new FileChooser();
        File selectedFile = fc.showOpenDialog(null);
        FileInputStream fileInput = new FileInputStream(selectedFile);
        
        Tournoi p = new Tournoi(14, nomT, nbr_Equipe, dateT, nomTerrain,fileInput);          
        TournoiCRUD pcd = new TournoiCRUD();
        pcd.ajouterTournoi(p);
        JOptionPane.showMessageDialog(null, "image ajouté");            
        JOptionPane.showMessageDialog(null, "Tournoi ajouté");
    } catch (FileNotFoundException ex) {
        Logger.getLogger(AddTournoiController.class.getName()).log(Level.SEVERE, null, ex);
    } 

}

标签: java

解决方案


首先,你真的应该使用准备好的语句,因为你构建数据库语句的方式容易受到SQL 注入的影响。其次,我认为准备好的语句无论如何都是插入 blob 的唯一方法。

PreparedStatement statement = MyConnection.getInstance().getCnx()
    .prepareStatement("INSERT INTO tournoi (nomTournoi,nbr_equipe,dateTournoi,terrainTournoi,image) VALUES (?,?,?,?,?)");
// I don't know what types you have here
statement.setString(1, t.getNomTournoi());
// Add your other arguments here
statement.set(5, t.getImage());

推荐阅读