Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL和Java上传图像_Java_Sql_Oracle_Dao - Fatal编程技术网

使用SQL和Java上传图像

使用SQL和Java上传图像,java,sql,oracle,dao,Java,Sql,Oracle,Dao,我一直在尝试用我的Java代码上传图像。我正在使用一个数据访问对象,并拥有ojdbc5和ORDI库。 我遇到的主要问题是试图使用以下代码行插入图像:stmtInsert.setImage(8,ORDSYS.ORDImage.init()) 我在这一点上已经坚持了很久了 public void createImageInfo( final String user_ID,

我一直在尝试用我的Java代码上传图像。我正在使用一个数据访问对象,并拥有ojdbc5和ORDI库。 我遇到的主要问题是试图使用以下代码行插入图像:stmtInsert.setImage(8,ORDSYS.ORDImage.init())

我在这一点上已经坚持了很久了

public void createImageInfo(           
                                     final String user_ID,
                                     final int photo_ID,
                                     final int num_views,
                                     final double price,
                                     final String photo_Name,
                                     final String imageCategory,
                                     final Calendar dateUploaded,
                                     final ORDSYS.ORDImage.init(image))
{


    PhotoSysDAO result = null;
    PreparedStatement stmtInsert = null;

    Connection conn = null;
    try
    {
    conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@oracle server",
                    "username", "password"); 
                    //open a connection to db...needs your account and password

        //int ratingID = RatingsDAO.getUniqueRatingId(conn);

        StringBuilder sbInsert = new StringBuilder();


        sbInsert.append("INSERT INTO ");
        sbInsert.append("Photos");
        sbInsert.append(" VALUES (");

        sbInsert.append("SequenceSet.seq_photo_id.nextval, ?, ?, ?, ?, ?, ?, ?, ?)");
                    Calendar date =  Calendar.getInstance();

                    stmtInsert.setInt(1, photo_ID);
        stmtInsert.setString(2, user_ID);
        stmtInsert.setInt(3, num_views);
                    stmtInsert.setDouble(4, price);
                    stmtInsert.setString(5, photo_Name);
                    stmtInsert.setString(6, imageCategory);
                    stmtInsert.setString(7, new SimpleDateFormat("dd/MMM/yyyy").format(date));
                    //stmtInsert.setImage(8, photo.ORDSYS.ORDIMGB);
                    stmtInsert.setImage(8, ORDSYS.ORDImage.init()); 
        int rows = stmtInsert.executeUpdate();

        if (rows != 1)
        {
            throw new SQLException("executeUpdate return value: " + rows);
        }

    }
    catch (SQLException ex)
    {   
        System.out.println("There was an error in connecting to the database");
    }
    finally
    {
        PhotoSysDAO.closeStatement(stmtInsert);
        PhotoSysDAO.closeJDBCConnection(conn);
    }
    //return result;
}

我的建议是,不要将图像存储在数据库中,这样会损害数据库的存储和性能。
将照片存储在文件夹位置并将路径存储在数据库中。

可能问题在于在sbInsert.append(“SequenceSet…”)之后没有使用sbInsert变量,该代码将在
stmtInsert.setInt(1,photo_ID)处抛出NullPointerException,因为stmtInsert从未初始化。您的具体问题是什么?您的
PreparedStatement
类的全名是什么。通常PreparedStatement不能
setImage
,但您可以使用
setBlob
来提供帮助,并在语句中使用
..、ORDSYS.ORDImage.init(?)
。将图像作为字节[]或文件,然后您可以创建一个
ByteArrayInputStream
或一个
FileInputStream
从中传递到
setBlob