我有一个字节[],实际上是一个图像。
我想将它存储在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。我应该先采取行动吗?
答案 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();
}
}