byte []存储在Oracle中

时间:2013-11-22 09:04:24

标签: java sql 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(String)上收到错误,因为DBConnection类不是Java Native类。

这是由早期开发人员为数据库连接制作的Custom类,它没有 prepareStatement(String)功能。

那现在该怎么办?

1。我应该在DBConnection类中创建一个方法prepareStatement(String)吗?

2。我应该先采取行动吗?

1 个答案:

答案 0 :(得分: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();
         }
     }