0
我試圖用我的Java代碼上傳圖像。我正在使用數據訪問對象並具有ojdbc5和ordim庫。 我的主要問題是試圖插入一個圖像使用下面的代碼行:stmtInsert.setImage(8,ORDSYS.ORDImage.init());使用SQL和Java上傳圖像
我一直在這個問題上困擾了很長時間。
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永遠不會初始化。你確切的問題是什麼? – jarnbjo
「PreparedStatement」類的全名是什麼。通常PreparedStatement不能'setImage',但你可以通過在你的語句中使用'setBlob''teads並使用'...,?,ORDSYS.ORDImage.init(?))來幫助你。將圖像作爲字節[]或文件形式存在,然後可以從中創建一個ByteArrayInputStream或FileInputStream以傳遞給setBlob。 – mihi