2012-12-11 48 views
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; 
} 
+0

也許問題是你不使用sbInsert.append(「SequenceSet ...」)之後的sbInsert變量 –

+0

該代碼會在'stmtInsert.setInt(1,photo_ID);'處引發一個NullPointerException,因爲stmtInsert永遠不會初始化。你確切的問題是什麼? – jarnbjo

+0

「PreparedStatement」類的全名是什麼。通常PreparedStatement不能'setImage',但你可以通過在你的語句中使用'setBlob''teads並使用'...,?,ORDSYS.ORDImage.init(?))來幫助你。將圖像作爲字節[]或文件形式存在,然後可以從中創建一個ByteArrayInputStream或FileInputStream以傳遞給setBlob。 – mihi

回答

-2

我給你的建議,在數據庫不存儲圖像,你會傷害你的數據庫存儲&性能。 將您的照片存儲在文件夾位置&將路徑存儲在數據庫中。

+0

謝謝你們的幫助。 –