使用SQL和Java上传图像
我一直在尝试用我的Java代码上传图像。我正在使用一个数据访问对象,并拥有ojdbc5和ORDI库。 我遇到的主要问题是试图使用以下代码行插入图像:stmtInsert.setImage(8,ORDSYS.ORDImage.init()) 我在这一点上已经坚持了很久了使用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,
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
。