javafx从sql server数据库中检索图像

时间:2017-01-22 17:31:05

标签: javafx

我正在使用JavaFX开发电子商务应用程序,我正在使用SQL Server 2014而我无法从数据库中检索图像。我正在使用for循环在网格窗格上添加数据库的所有值。图像应该位于网格窗格的中心,产品名称和价格位于底部。我每次尝试都会得到一个java.lang.NullPointerException。请帮助我吗?

  BorderPane background[]= new BorderPane[13];

      Label productName[]= new Label[13];
      Label priceLable[]= new Label[13];
      Image image;
      ImageView imageView;

    for (int i = 0; i<=12;i++){
        background[i]=new BorderPane();
        background[i].setStyle("-fx-background-color: rgb(216, 216, 216)");
        background[i].setPrefHeight(300);
        background[i].setPrefWidth(250);

        try {

                String query = "select pname,price,manufacturer,pimg from Adulis_product where pid=?";
                pst = con.prepareStatement(query);
                pst.setInt(1, adp.getProduct_id());

                rs = pst.executeQuery();

                while (rs.next()) {

                    productName[i]=new Label(rs.getString("pname")+" - "+rs.getString("manufacturer"));
                    productName[i].setStyle("-fx-text-fill: #282828");
                    productName[i].setFont(Font.font(" sans-serif", FontWeight.EXTRA_BOLD,14));

                    priceLable[i]= new Label(rs.getString("price"));
                    priceLable[i].setStyle("-fx-text-fill: #1da288");
                    priceLable[i].setFont(Font.font(" sans-serif", FontWeight.EXTRA_BOLD,15));
                    int finalI2 = i;

                    InputStream is = rs.getBinaryStream("pimg");
                    OutputStream os= new FileOutputStream(new File("pic.jpg"));
                    byte[] content= new byte[1024];
                    int size=0;
                    while((size = is.read(content))!=-1){

                        os.write(content, 0,size);
                    }
                    os.close();
                    is.close();
                    image = new Image("file:pic"+i+".jpg", 250,300,false,true);

                    imageView = new ImageView(image);
                    imageView.setFitHeight(300);
                    imageView.setFitWidth(250);


                    VBox prceNmanufactue= new VBox(10);
                    prceNmanufactue.getChildren().addAll(productName[i],priceLable[i]);
                   prceNmanufactue.setPadding(new Insets(0,0,0,5));

                    Image newp= new Image(getClass().getResourceAsStream("New_30px.png"));
                    ImageView newimv= new ImageView(newp);

                    background[i].setTop(newimv);

                    VBox borderElements= new VBox(5);
                    borderElements.getChildren().addAll(prceNmanufactue,addtocart[i]);
                    background[i].setBottom(borderElements);

                }
            } catch (Exception e1) {
                System.out.println(e1);
            }

1 个答案:

答案 0 :(得分:0)

您正在将图像数据写入文件名为pic.jpg的文件:

InputStream is = rs.getBinaryStream("pimg");
OutputStream os= new FileOutputStream(new File("pic.jpg"));
byte[] content= new byte[1024];
int size=0;
while((size = is.read(content))!=-1){

   os.write(content, 0,size);
}

然后尝试从具有不同名称的文件中读取:

image = new Image("file:pic"+i+".jpg", 250,300,false,true);

所以大概是你打算做的

OutputStream os= new FileOutputStream(new File("pic"+i+".jpg"));

将所有数据复制到文件只是为了重新读取它是非常低效的。你真的需要这个文件吗?为什么不做呢

InputStream is = rs.getBinaryStream("pimg");
image = new Image(is, 250,300,false,true);

您似乎也没有对此图片视图执行任何操作,因此您需要将其添加到某处的某个窗格。