java 代码
- package test;
- import java.io.BufferedInputStream;
- import java.io.FileInputStream;
- import java.io.PrintStream;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class Test {
- private Connection conn;
- /**
- * 得到一个数据库的连接
- *
- * @return 返加Connection对象
- */
- public Connection getConnection() {
- try {
- Class.forName("oracle.jdbc.driver.OracleDriver");
- conn = DriverManager.getConnection(
- "jdbc:oracle:thin:@localhost:1521:lyx", "scott", "tiger");
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return conn;
- }
- /**
- * 向表中插入图片
- *
- * @param path图片所在的路径
- * @return 整形 判断成功或失败
- */
- public int insertImage(String path) throws Exception {
- int i = 0;
- Statement st = null;
- ResultSet rs = null;
- conn=this.getConnection();
- conn.setAutoCommit(false);//设置数据库为不自动提交,必须的一步
- st = conn.createStatement();
- //先插入一个空对象,这里我调用了Empty_BLOB()函数
- i = st
- .executeUpdate("insert into image (id,image) values (seq1.nextval,Empty_BLOB())");
- //以行的方式锁定
- rs = st
- .executeQuery("select image from image where id=(select max(id) from image) for update");
- if (rs.next()) {
- //得到流
- oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
- //从得到的低级流构造一个高级流
- PrintStream ps = new PrintStream(blob.getBinaryOutputStream());
- BufferedInputStream bis = new BufferedInputStream(
- new FileInputStream(path));
- byte[] buff = new byte[1024];
- int n = 0;
- //从输入到输出
- while ((n = bis.read(buff)) != -1) {
- ps.write(buff, 0, n);
- }
- //清空流的缓存
- ps.flush();
- //关闭流,注意一定要关
- ps.close();
- bis.close();
- }
- rs.close();
- st.close();
- conn.close();
- return i;
- }
- public static void main(String[] args) throws Exception {
- Test test=new Test();
- test.insertImage("e:\\3.jpg");
- System.out.println("OK");
- }
- }