2013-11-22 70 views
0

我有一個字節[]這實際上是一個圖像。字節[]要存儲在Oracle

我想將它存儲在Oracle 11g中。我在表中創建了一個BLOB列。並通過以下我試圖插入它。

String imageStr = "xyz...." 
byte[] data = imageStr.getBytes(); 
String sQuery = "insert into Table (LOCATION , BLOB_DATA) Values ('Lahore', data) "; 

它拋出異常 「值java.sql.SQLException:ORA-01465:無效的十六進制數

我搜索了一下,發現這種類型的查詢應通過完成PreparedStaement

,所以我做了以下

PreparedStatement prepStmt = dbConnection.prepareStatement("insert into Table (LOCATION, BLOB_DATA) values(?,?); 
prepStmt.setString(1, 'Lahore'); 
prepStmt.setBytes(2, bytes); 

我開始對dbConnection.prepareStatement(字符串)得到錯誤,因爲DBConnection的類不是Java本機類的東西。

它是由早期開發人員爲數據庫連接製作的自定義類,它沒有prepareStatement(String)函數。

那麼現在該怎麼做?

1.我應該在DBConnection類中創建一個prepareStatement(String)方法嗎?

2.我應該採取第一種方法嗎?

回答

1

你可以看一下我的例子存儲圖像以dB爲單位

Statement s; 
     Connection c;  
     FileInputStream fis; 
     PreparedStatement ps; 
     File file; 
     try 
     { 
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//your driver 
       c=DriverManager.getConnection("Jdbc:Odbc:image","scott","tiger");//password and name changes according to your db 
       s=c.createStatement(); 
       st.execute("Create table ImageStoring(Image_No number(5),Photo blob)"); 
     } 
     catch(Exception e1) 
     { 
       e1.printStackTrace(); 
     } 

     try 
     {  
       file=new File"D:/ARU/Aruphotos/4.jpg"); 
       fis=new FileInputStream(file); 

       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
       c=DriverManager.getConnection("Jdbc:Odbc:image","scott","tiger"); 
       s=c.createStatement(); 

       ps=c.prepareStatement("insert into ImageStoring values(?,?)"); 
       ps.setInt(1,2); 
       ps.setBinaryStream(2,fis,(int)file.length()); 
       System.out.println("success"); 
       ps.execute(); 
       ps.close(); 
       c.close(); 
     } 
     catch(Exception e) 
     { 
       e.printStackTrace(); 
     } 
    } 
+0

通知「連接C」在你的代碼是java.sql.Connection中; 所以你得到con.prepareStatement()的本地方法; 但在My Case Connection中是DBConnection con的一個實例; DBConnection是由以前的開發人員製作的自定義類。 哪些沒有con.prepareStatement();方法 –

+0

是不是你把你的整個代碼包括DBConnection – constantlearner

+0

希望我可以.. 這是一個大的大類.. 大約6000行。 幷包含一些客戶端信息,這就是爲什麼。 你能給我你最後的SQL查詢嗎? 所以我可以通過在Oracle上運行來檢查它。 所以我可以確保數據庫部分工作正常 –