java 代码
import javax.swing.* ;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import java.io.*;
public class TestJFrame implements ActionListener
{
JTextArea textAreaOutput;
JButton button;
Connection conn = null;
String tbname;
String pathname;
String blobname;
public static void main (String[] args)
{
TestJFrame ttf=new TestJFrame();
ttf.createUI();
}
public void createUI(){
JFrame jf=new JFrame("SQLBLOB");
Container c=jf.getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT,30,30));
//定义图标
ImageIcon ii=new ImageIcon("main.gif");
Image image=ii.getImage();
JPanel panel =new JPanel();
jf.setIconImage(image);
textAreaOutput = new JTextArea("select * from tablename", 6, 10);
textAreaOutput.setSelectedTextColor(Color.RED);
textAreaOutput.setLineWrap(true); //激活自动换行功能
textAreaOutput.setWrapStyleWord(true); // 激活断行不断字功能
jf.setExtendedState(JFrame.ICONIFIED);
//读取配置文件
try{
Properties ps=new Properties();
FileInputStream fis= new FileInputStream("tbname.properties");
ps.load(fis);
fis.close();
tbname=ps.getProperty("tablename");
pathname=ps.getProperty("pname");
blobname=ps.getProperty("blobname");
System.out.println(tbname+":"+pathname+":"+blobname);
}catch (IOException e) {
System.out.println(e.getLocalizedMessage());
}
//选择数据库类型
ButtonGroup bg=new ButtonGroup();
JRadioButton sqlbutton=new JRadioButton("Sqlserver");
JRadioButton orabutton=new JRadioButton("oracle");
bg.add(sqlbutton);
bg.add(orabutton);
button=new JButton("导出");
JButton wButton=new JButton("写入");
button.addActionListener(this);
wButton.addActionListener(this);
sqlbutton.addActionListener(this);
orabutton.addActionListener(this);
//控制窗口初始化大小
jf.setSize(500,200);
//jf.setLocation(400,200);
c.add(textAreaOutput);
c.add(sqlbutton);
c.add(orabutton);
c.add(button);
c.add(wButton);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public void actionPerformed(ActionEvent ev){
String s =ev.getActionCommand();
if(s.equals("导出")){
this.submit();
}
if(s.equals("Sqlserver")){
try{
conn=getsqlConnection();
}
catch (ClassNotFoundException e) {
System.out.println(e.getLocalizedMessage());
} catch (SQLException e) {
System.out.println(e.getLocalizedMessage());
} catch (IOException e) {
System.out.println(e.getLocalizedMessage());
}
}
if(s.equals("oracle")){
try{
conn=getConnection();
}
catch (ClassNotFoundException e) {
System.out.println(e.getLocalizedMessage());
} catch (SQLException e) {
System.out.println(e.getLocalizedMessage());
} catch (IOException e) {
System.out.println(e.getLocalizedMessage());
}
}
if(s.equals("写入")){
String fname=textAreaOutput.getText();
this.writeBlob(tbname,fname);
}
}
public void submit(){
String sql=textAreaOutput.getText();
//System.out.println(sql);
this.readBlob(sql);
}
public Connection getConnection() throws ClassNotFoundException,IOException,
SQLException {
Properties ps=new Properties();
FileInputStream fis= new FileInputStream("oracle.properties");
ps.load(fis);
fis.close();
String url=ps.getProperty("db_url");
String user=ps.getProperty("username");
String pwd=ps.getProperty("password");
String driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(driver);
return DriverManager.getConnection(url, user, pwd);
}
//加载sqlserver驱动mssqlserver.jar、msutil.jar和 msbase.jar
public Connection getsqlConnection() throws ClassNotFoundException,IOException,
SQLException {
Properties ps=new Properties();
FileInputStream fis= new FileInputStream("sqlserver.properties");
ps.load(fis);
fis.close();
String url=ps.getProperty("db_url");
String user=ps.getProperty("username");
String pwd=ps.getProperty("password");
//采用jtds
// String driver = "net.sourceforge.jtds.jdbc.Driver"
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(driver);
return DriverManager.getConnection(url, user, pwd);
}
private void readBlob(String sql ){
try {
//conn = getConnection();
//String sql = "select * from "+tablename+" where "+columname+"=?";
//PreparedStatement stmt = conn.prepareStatement(sql);
Statement stmt = conn.createStatement();
//stmt.setString(1,"d:\\身份证.jpg");
System.out.println("你输入的sql语句为:"+sql);
ResultSet rs = stmt.executeQuery(sql);
int tempLen = 0;
int amount = 0;
while (rs.next()){
String colVal=rs.getString(pathname);
colVal=colVal.replaceAll("\\\\","\\\\\\\\");
colVal=colVal.replaceAll(" ","");
//System.out.println(colVal);
File file=new File(colVal);
byte[] buffer = new byte[1024];
OutputStream out = new FileOutputStream(file);
Blob blob = rs.getBlob(blobname);
InputStream in = blob.getBinaryStream();
while ((tempLen = in.read(buffer)) != -1) {
out.write(buffer, 0, tempLen);
amount += tempLen;
//System.out.println("已经读出并写:" + amount + " 字节");
}
System.out.println(colVal+"写出完毕");
out.flush();
out.close();
in.close();
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
System.out.println(e.getLocalizedMessage());
} catch (IOException e) {
System.out.println(e.getLocalizedMessage());
} catch (NullPointerException e) {
System.out.println("无记录存在。核实再试");
}
finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
System.out.println(e.getLocalizedMessage());
}
}
}
private void writeBlob(String table_name,String file_name) {
try {
conn.setAutoCommit(false);
String sql = "insert into "+table_name+" ("+pathname+","+blobname+") values(?,?)";
PreparedStatement stmt = conn.prepareStatement(sql);
System.out.println(file_name);
stmt.setString(1,file_name);
File file=new File(file_name);
FileInputStream fis=new FileInputStream(file);
stmt.setBinaryStream(2,fis,fis.available());
stmt.executeUpdate();
conn.commit();
stmt.close();
fis.close();
}catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
System.out.println(e1.getLocalizedMessage());
}
System.out.println(e.getLocalizedMessage());
} catch (IOException e) {
System.out.println(e.getLocalizedMessage());
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
System.out.println(e.getLocalizedMessage());
}
}
}
} tbname.properties文件
tablename=bloblib
#定义路径字段
pname=pathname
#定义图片blob字段
blobname=photo
oracle.properties文件
db_url=jdbc:sqlserver://127.0.0.1:1433;Database=testdb
#db_url=jdbc:jtds:sqlserver://127.0.0.1:1433/testdb
username=sa
password=sa
oracle.properties文件
db_url=jdbc:oracle:thin:@127.0.0.1:1521:tytx
#db_url=jdbc:jtds:sqlserver://127.0.0.1:1433/testdb
username=scott
password=oracle