jdbc操作SQL Server中的image字段,要使用二进制流的方法,下面我给出两个简单的实例,一个是添加数据、一个是查询数据。
首先,在SQL Server中建立一个数据库,命名为:mydata,在数据库里新建一个表:test,表里有两个字段:tid(int)、tdata(image), 挂号内为数据类型。在D盘建立一幅图像:123.jpg,之后我们将把123.jpg添加到数据库,然后再查询。
添加数据(TestInsert.java,SQL Server驱动2005,2000的可以修改相应驱动和URL):
import java.sql.*;
public class TestInsert {
public static void main(String[] args){
String connectionUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=mydata;user=sa;password=";
Connection conn = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(connectionUrl);
java.io.File file = new java.io.File("d:\\123.jpg");
java.io.FileInputStream fis = new java.io.FileInputStream(file);
ResultSet result=null;
String sql=null;
PreparedStatement prestmt=null;
sql="insert into test(tid,tdata) values(?,?)";
prestmt =conn.prepareStatement(sql);
prestmt.setInt(1, 1);
prestmt.setBinaryStream(2,fis,(int)file.length());
prestmt.executeUpdate();
System.out.println("success!");
conn.close();
}
catch(Exception e){System.out.println("error: " + e);}
}
}
查询并保存数据(TestQuery.java):
import java.sql.*;
import java.io.*;
public class TestQuery {
public static void main(String[] args){
String connectionUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=commerce1;user=sa;password=";
Connection conn = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(connectionUrl);
java.io.File file = new java.io.File("d:\\1230.jpg"); //不要覆盖原来的文件,以便比较
java.io.FileOutputStream fos = new java.io.FileOutputStream(file);
String sql="select tdata from test where tid=2";
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery(sql);
result.next();
InputStream fis = result.getBinaryStream(1);
byte[] b = new byte[10*1024];
while(fis.read(b,0,10240) != -1){
fos.write(b,0,10240);
}
fos.flush();
System.out.println("success!");
conn.close();
}
catch(Exception e){System.out.println("error: " + e);}
}
}