日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC读写oracle大字段BLOB

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC读写oracle大字段BLOB 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

JDBC將大字段BLoB內容寫入到Oracle數據庫(寫大字段BLOB)

例子的詳細信息參照為技改大修批量生成數據寫的小工具

1.1 構建界面MyNotePad.java

package test;

?

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

?

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JRadioButton;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

?

public class MyNotePad extends JFrame {

?

?

private JTextField filenameTf = new JTextField(),dirTf? = new JTextField(),xmmcTf = new JTextField(),userNameTf = new JTextField();

private JLabel fileNameLabel? = new JLabel("文件名:"),filePathLable= new JLabel("文件路徑:"),xmmcLable = new JLabel("項目名稱:"),userNameLabel=new JLabel("賬號:");

?

private JButton openBt = new JButton("選擇可研報告");

private JButton saveBt = new JButton("生成項目");

private JPanel optPane = new JPanel();

private JPanel navigatePane = new JPanel();

private JTextArea contentTa = new JTextArea(5,20);

private JRadioButton rb1 = new JRadioButton("技改",true), rb2 = new JRadioButton("大修");

private ButtonGroup group= new ButtonGroup();

private String lx="技改";

public static boolean isReady = false;

?

public MyNotePad(String title)

{

super(title);

?

openBt.addActionListener(new OpenHandler());

optPane.add(openBt);

?

saveBt.addActionListener(new SaveHandler());

optPane.add(saveBt);

dirTf.setEditable(false);

filenameTf.setEditable(false);

?

group.add(rb1);group.add(rb2);

rb1.addActionListener(listener2);

rb2.addActionListener(listener2);

navigatePane.setLayout(new GridLayout(5,2));

navigatePane.add(fileNameLabel);

navigatePane.add(filenameTf);

navigatePane.add(filePathLable);

navigatePane.add(dirTf);

navigatePane.add(xmmcLable);

navigatePane.add(xmmcTf);

navigatePane.add(rb1);

navigatePane.add(rb2);

navigatePane.add(userNameLabel);

navigatePane.add(userNameTf);

?

?

Container contentPane = this.getContentPane();

contentPane.add(navigatePane,BorderLayout.NORTH);

contentPane.add(optPane,BorderLayout.SOUTH);

contentPane.add(new JScrollPane(contentTa),BorderLayout.CENTER);

this.setSize(600,600);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

?

private ActionListener listener2 = new ActionListener(){

?

public void actionPerformed(ActionEvent actionEvent) {

JRadioButton rb = (JRadioButton)actionEvent.getSource();

lx = rb.getText();

}

};

class OpenHandler implements ActionListener {

public void actionPerformed(ActionEvent actionEvent) {

JFileChooser jc = new JFileChooser();//文件選擇

int rVal = jc.showOpenDialog(MyNotePad.this );

if( rVal==JFileChooser.APPROVE_OPTION){

File dir = jc.getCurrentDirectory();//文件路徑

File file = jc.getSelectedFile();

filenameTf.setText(file.getName());

dirTf.setText(dir.toString());

isReady = true;

}

}

}

?

class SaveHandler implements ActionListener{

public void actionPerformed(ActionEvent actionEvent) {

if( isReady){

String fileName = getFilenameTf().getText();

String fileDir = getDirTf().getText();

String xmmc = xmmcTf.getText();

System.out.println("xmmc="+xmmc+"xmmc.length="+xmmc.length());

?

if( xmmc==null||xmmc.trim()==""||xmmc.length()<=0)

{

JOptionPane.showMessageDialog(MyNotePad.this, "請先輸入項目名稱");

return;

}

String userName = userNameTf.getText();

if( userName==null||userName.trim()==""||userName.length()<=0)

{

JOptionPane.showMessageDialog(MyNotePad.this, "請先輸入人員賬號");

return;

}

//fileDir+"//"+fileName是文件路徑,加上文件的名稱

if( CreateXM.createDxxm(lx,fileDir+"//"+fileName,fileName,10,userName,contentTa,xmmc)){

JOptionPane.showMessageDialog(MyNotePad.this, "批量生成項目成功");

}else

{

JOptionPane.showMessageDialog(MyNotePad.this, "批量生成項目失敗");

}

}else

{

JOptionPane.showMessageDialog(MyNotePad.this, "請先選擇可研報告");

return;

}

}

}

?

public JTextField getFilenameTf() {

return filenameTf;

}

public JTextField getDirTf() {

return dirTf;

}

?

public static void main(String []args)

{

new MyNotePad("批量生成項目");

//System.out.println("測試Helloword!");

}

}

1.2 實現生成項目的功能(包括傳入大字段數據Blob到數據庫的功能)

package test;

?

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Random;

?

import javax.swing.JTextArea;

/**

* 批量生成技改大修項目

* 主要的功能點:可研報告文件存儲在數據庫中

* @author fy

*

*/

public class CreateXM {

?

?

public static boolean createDxxm(String jgOrDxString ,String filePath,String fileName,int sl,String userName,JTextArea jTextArea,String xmmcPre){

?

Connection conn=null;

try {

conn = ConnectionFactory.getConnection();

} catch (Exception e3) {

PrintComm.println("數據庫連接失敗", jTextArea);

return false;

}

if( conn==null)

{

PrintComm.println("數據庫連接失敗", jTextArea);

return false;

}

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

Date now = new Date();

String bzsj = df.format(now);

Statement psmt = null;

ResultSet rs = null;

String xmlx = "";

String zylb = "";

String zyxf ="";

String gzyy="";//改造原因

String[] xmlxArr? ={"70101","70102","70103"};

List<String> zylbArr =new ArrayList<String>();//{"70201","70202","70203","70299"};

zylbArr.add("70201");

zylbArr.add("70202");

zylbArr.add("70203");

zylbArr.add("70299");

List<String> gzyyList = null;

Random random = null;

String kybgAttr = "5F4EBE72-B09C-4AD6-A623-085B9F2AE982";

String bzr = "";

String bzbm = "";

String userID = "";

String dsgs? ="";

String wsgs="";

String qygs="";

String selBzrSql = "select empid,deptid,user_id from mw_app.mwv_om_userinfo userinfo where userinfo.user_name='"+userName+"' ";

try {

psmt = conn.createStatement();

rs? = psmt.executeQuery(selBzrSql);

if(rs.next())

{

bzr = rs.getString(1);

bzbm = rs.getString(2);

userID = rs.getString(3);

}

} catch (SQLException e2) {

e2.printStackTrace();

}

?

PrintComm.println("bzr="+bzr+",bzbm="+bzbm+",userID="+userID, jTextArea);

String? dldWsql = "select frdw.obj_id, frdw.mc, frdw.dwjb, dwjb.JBMC from (select obj_id, mc, dwjb from mw_sys.MWT_PD_DEPS ";

dldWsql +="where SFCX='63785359-B0D9-4548-8F18-4F8FD682D684'? and dwjb is not null and SFDLDW = 'T' start with obj_id = (select lsbm from mw_sys.MWT_PD_EMPS where ";

dldWsql +="sysuserid ='"+userID+"' and ZZQK='00F94133-B7A4-42E1-8C0B-3639993F5486' ) connect by prior sjbm = obj_id)frdw,mw_app.MWT_UD_GY_DWJB dwjb ";

dldWsql +="where dwjb.JBBH = frdw.dwjb and frdw.dwjb < 8 order by dwjb desc ";

try {

rs = psmt.executeQuery(dldWsql);

while(rs.next())

{

String dwjb=rs.getString(3);

System.out.println("dwjb==="+dwjb);

if( dwjb.equals("4"))//單位級別是地市級電網的

{

dsgs = rs.getString(1);

System.out.println("dwjb.equals(/"4/"),dsgs="+dsgs);

}

if(dwjb.equals("3"))//單位級別是網省公司的

{

wsgs = rs.getString(1);

System.out.println("dwjb.equals(/"3/"),wsgs="+wsgs);

}

if(dwjb.equals("2"))//單位級別是區域公司的

{

qygs = rs.getString(1);

System.out.println("dwjb.equals(/"2/"),qygs="+qygs);

}

}

} catch (SQLException e2) {

e2.printStackTrace();

}

?

if( "技改"==jgOrDxString)

{

kybgAttr="594F3551-3F2E-456C-B5BF-AD029BCD2FF4";

zylbArr.add("70204");

?

String gzyySql = "select bzdm from MW_APP.MWT_UD_GG_DM WHERE DMLB = '723' ";

try {

psmt = conn.createStatement();

rs? = psmt.executeQuery(gzyySql);

gzyyList = new ArrayList<String>();

while(rs.next())

{

gzyyList.add(rs.getString(1));

}

?

random = new Random();

int gzyyIndex = random.nextInt(gzyyList.size()-1);

System.out.println("gzyyIndex==="+gzyyIndex);

PrintComm.println("gzyyIndex="+gzyyIndex, jTextArea);

gzyy = gzyyList.get(gzyyIndex);

} catch (SQLException e1) {

e1.printStackTrace();

}

}

?

?

String sfcyh="T";//是否差異化補強改造

?

List<String> zyxfList = null;

try {

for( int i = 1;i<=sl;i++){

String xmmc = bzsj+xmmcPre+"-"+i;

System.out.println("xmmc="+xmmc);

PrintComm.println("xmmc="+xmmc,jTextArea);

?

?

random = new Random();

int xmlxIndex = random.nextInt(xmlxArr.length-1);

xmlx = xmlxArr[xmlxIndex];

random = new Random();

int zylbIndex = random.nextInt(zylbArr.size()-1);

zylb=zylbArr.get(zylbIndex);

String sql = "SELECT DM, DMMC FROM MW_APP.MWT_UD_GG_DM WHERE DMLB = '703' and dm<>'70305' and bzdm like (select bzdm from mw_app.mwt_ud_gg_dm where dm = '"+zylb+"')||'%'";

psmt = conn.createStatement();

rs? = psmt.executeQuery(sql);

zyxfList = new ArrayList<String>();

while(rs.next())

{

zyxfList.add(rs.getString(1));

}

random = new Random();

if( zyxfList.size()==1)

{

zyxf = zyxfList.get(0);

}else if( zyxfList.size()>1)

{

int zyxfIndex = random.nextInt(zyxfList.size()-1);

zyxf = zyxfList.get(zyxfIndex);

}

?

String dydj = "13";

?

String dxmd="70403";

String zycd = "70602"; String zcxz= "00403";

String xmzt = "71102";? String qtxmsx = "";? String sfnw = "F";?? String sfkqdwxm = "F";

String xmid = "";

?

int ztz = 0;

?

psmt = conn.createStatement();

rs = psmt.executeQuery("select mw_sys.newguid||'-'||substr('0000'||rownum,-5,5), round(dbms_random.value(400,1)) from dual");

if(rs.next()){

xmid = rs.getString(1);

ztz = rs.getInt(2);

}

PrintComm.println("xmid="+xmid+",ztz="+ztz, jTextArea);

String insertSql = "insert into mw_app.mwt_ud_jgdx_dxxmk (obj_id,obj_dispidx,bzr,bzbm,bzsj,xmmc,kb,znhbdz,xmlx,zylb,zyxf,dydj,dxmd,zycd,xmkssj,xmwcsj,zcxz,ztz,jhnd,xmzt,qtxmsx,sfnw,sfkqdwxm,xmnr,wsgs,dsgs,qygs) ";

insertSql+="select '"+xmid+"', mw_sys.mwq_obj_dispidx.nextval,'"+bzr+"','"+bzbm+"',sysdate,'"+xmmc+"','1' ,0? ";

insertSql+=",'"+xmlx+"','"+zylb+"','"+zyxf+"','"+dydj+"','"+dxmd+"','"+zycd+"',to_date('2012-01','yyyy-MM'),to_date('2012-12','yyyy-MM'),'"+zcxz+"','"+ztz+"','2012','"+xmzt+"','"+qtxmsx+"','"+sfnw+"','"+sfkqdwxm+"','"+xmmc+"','"+wsgs+"','"+dsgs+"','"+qygs+"' ";

insertSql+=" from dual";

if( "技改"==jgOrDxString){

insertSql = "insert into mw_app.mwt_ud_jgdx_jgxmk (TGDWSSNL,obj_id,obj_dispidx,bzr,bzbm,bzsj,xmmc,kb,znhbdz,xmlx,zylb,zyxf,dydj,gzmd,zycd,xmkssj,xmwcsj,zcxz,ztz,bznd,xmzt,qtxmsx,sfnw,sfkqdwxm,xmnr,wsgs,jglx,lxyj,bz,sfknxm,dsgs,qygs) ";

insertSql+="select 1,'"+xmid+"', mw_sys.mwq_obj_dispidx.nextval,'"+bzr+"','"+bzbm+"',sysdate,'"+xmmc+"','1' ,0? ";

insertSql+=",'"+xmlx+"','"+zylb+"','"+zyxf+"','"+dydj+"','"+dxmd+"','"+zycd+"',to_date('2012-01','yyyy-MM'),to_date('2012-12','yyyy-MM'),'"+zcxz+"','"+ztz+"','2012','"+xmzt+"','"+qtxmsx+"','"+sfnw+"','"+sfkqdwxm+"','"+xmmc+"','"+wsgs+"','70501','"+gzyy+"','否','是','"+dsgs+"','"+qygs+"' ";

insertSql+=" from dual";

?

String insertNdtzSql = "insert into mw_app.mwt_ud_jgdx_ndtzqk(obj_id,obj_dispidx,xmid,nd,zjjh) ";

insertNdtzSql+=" select mw_sys.newguid||'-'||substr('0000'||rownum,-5,5),mw_sys.mwq_obj_dispidx.nextval , '"+xmid+"','2012','"+ztz+"' from dual ";

psmt.addBatch(insertNdtzSql);

}

PrintComm.println("insertSql="+insertSql, jTextArea);

psmt.addBatch(insertSql);

psmt.executeBatch();

if ("70202"==zylb||"70203"==zylb){//如果是電網一次和二次系統要添加規模

insertSql? = "insert into mw_app.mwt_ud_jgdx_gzgm (obj_id,obj_dispidx,xmid,dydj,jldw,sl,zjjh)";

insertSql+="select mw_sys.newguid||'-'||substr('0000'||rownum,-5,5),mw_sys.mwq_obj_dispidx.nextval,'"+xmid+"',2, '臺',3,"+ztz+" from dual";

System.out.println("insertSql="+insertSql);

psmt.execute(insertSql);

}

?

File imagFile = new File(filePath);//根據文件的完整路徑名,得到File類型的文件

String vfile_id = "";

psmt = conn.createStatement();

rs = psmt.executeQuery("select mw_sys.newguid from dual");

if(rs.next()){

vfile_id = rs.getString(1);

}

String insertVfile = "insert into mw_sys.mwt_is_vfile(vfile_id, vdir_id, vfile_name, vfile_dispidx, vfile_ctime, vfile_mtime, vfile_sn)";

insertVfile+="select '"+vfile_id+"','fd991f0d-0871-4efe-bb4e-0c7d26a4fac8','"+fileName+"','12345',sysdate,sysdate,20188 from dual";

PrintComm.println("往vfile表中插入數據:insertVfile="+insertVfile,jTextArea);

psmt.executeQuery(insertVfile);

?

String insertFsdata = "insert into mw_sys.mwt_om_fsdata(obj_id,attr_id,vfile_id,fsdata_data) values(";

insertFsdata+="'"+xmid+"','"+kybgAttr+"','"+vfile_id+"',?)";

?

?

PrintComm.println("往fsdata表中插入數據:? insertFsdata="+insertFsdata,jTextArea);

PreparedStatement? pstmt = null;

pstmt? = conn.prepareStatement(insertFsdata);

?

pstmt.setBinaryStream(1, new FileInputStream(filePath),(int)imagFile.length());//將可研報告的文件存儲在數據庫中

pstmt.executeUpdate();

?

String kybgSql = "update mw_app.mwt_ud_jgdx_dxxmk set kybg=? where obj_id ='"+xmid+"'";

if( "技改"==jgOrDxString){

kybgSql = "update mw_app.mwt_ud_jgdx_jgxmk set kybg=? where obj_id ='"+xmid+"'";

}

PrintComm.println(kybgSql,jTextArea);

pstmt = conn.prepareStatement(kybgSql);

pstmt.setString(1, fileName);

pstmt.executeUpdate();

?

}//end of for

} catch (SQLException e) {

e.printStackTrace();

return false;

} catch (FileNotFoundException e) {

e.printStackTrace();

return false;

}finally{

try {rs.close();} catch (SQLException e) {e.printStackTrace();}

try {psmt.close();} catch (SQLException e) {e.printStackTrace();}

try {conn.close();} catch (SQLException e) {e.printStackTrace();}

}

?

return true;

}

?

}

1.3自定義的輸出工具類(用于將后臺信息輸出到界面中)

package test;

?

import javax.swing.JTextArea;

?

public class PrintComm {

?

public PrintComm(){

}

public static void println(String msg,JTextArea jTextArea)

{

jTextArea.append(msg+"/n");

}

}

1.4獲得數據庫連接的工具類ConnectionFactory.java

package test;

?

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.Properties;

?

public class ConnectionFactory {

public static Properties config = new Properties();

static{

try {

InputStream in = ConnectionFactory.class.getClassLoader()

.getResourceAsStream("db.txt");//讀取配置文件

config.load(in);

in.close();

} catch (Exception e) {

}

?

}

?

public static Connection getConnection() throws ClassNotFoundException, SQLException{

Connection conn = null;

System.out.println("getDriver()="+getDriver());

Class.forName(getDriver());

conn = DriverManager.getConnection(getDbUrl(),getUsername(),getPassword());

return conn;

}

?

public static String getDriver(){

return config.getProperty("driver");

}

public static String getDbUrl(){

return config.getProperty("dburl");

}

?

public static String getUsername(){

return config.getProperty("username");

}

public static String getPassword(){

return config.getProperty("password");

}

?

}

1.5ConnectionFactory使用的配置文件db.txt

driver=oracle.jdbc.driver.OracleDriver

dburl=jdbc:oracle:thin:@192.168.43.20:1521:spms

username=mw_sys

password=sys

? 將數據庫中的大字段BLOB的內容讀出到文件中(讀取大字段BLOB

public byte[] getBlob(String memberID) {

String query = "select fsdata_data from mw_sys.mwt_om_fsdata where obj_id ='"+memberID+"'";

Statement stmt =null;

ResultSet rs = null;

Blob blob = null;

byte[] bytes = null;

BufferedOutputStream stream = null;? //讀取的文件流

try {

stmt = conn.createStatement();

rs = stmt.executeQuery(query);

if( rs.next()){

blob = rs.getBlob(1);

}

bytes = blob.getBytes(1, (int)(blob.length()));

File file = new File("E://test3.jpg");//文件路徑

FileOutputStream fstream = new FileOutputStream(file);

stream = new BufferedOutputStream(fstream);

stream.write(bytes);

stream.close();

} catch (SQLException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return bytes;

}

public static void main(String []args){

LobServlet lob = new LobServlet();

lob.getBlob("EEDF4A05-E408-4804-9BE4-69878AA80D67-00001");

}

讀取數據庫中的大字段數據到瀏覽器端顯示(不完善的版本

3.1 ?BlobTest.jsp

<%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>

<html>

<head>

</head>

<body>

<form action="LobServletTest">

<input type="submit"/>

</form>

</body>

</html>

3.2 LobServlet.java

package servlests;

?

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.sql.Blob;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

?

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

?

import utils.ConnectionFactory;

?

public class LobServlet extends HttpServlet {

?

/**

*

*/

private static final long serialVersionUID = 1L;

private static? Connection conn = null;

static {

?

try {

conn = ConnectionFactory.getConnection();

System.out.println("conn="+conn);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

ServletOutputStream out = response.getOutputStream();

String memberID= "6ED4140F-6D18-496C-B391-1A12953B8910-00001";

out.write(getBlob(memberID));

out.flush();

out.close();

}

public byte[] getBlob(String memberID) {

String query = "select fsdata_data from mw_sys.mwt_om_fsdata where obj_id ='"+memberID+"'";

Statement stmt =null;

ResultSet rs = null;

Blob blob = null;

byte[] bytes = null;

try {

stmt = conn.createStatement();

rs = stmt.executeQuery(query);

if( rs.next()){

blob = rs.getBlob(1);

}

bytes = blob.getBytes(1, (int)(blob.length()));

?

} catch (SQLException e) {

e.printStackTrace();

} finally{

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return bytes;

}

}

3.3 配置文件web.xml

<servlet>

<servlet-name>LobServletTest</servlet-name>

<servlet-class>servlests.LobServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>LobServletTest</servlet-name>

<url-pattern>/LobServletTest</url-pattern>

</servlet-mapping>

?

注:以上例子中不完善之處

1)在點擊頁面上的按鈕后,才會顯示大字段文件的內容。改進錯誤:讓一進入頁面就自動顯示文件的內容

?(2)第一次訪問的時候能夠正常顯示,再次訪問的時候,就會報nullpointexception,數據庫連接已關閉的錯誤;

? 分析原因為:在以上的LobServlet.java中,Connection conn是聲明為靜態變量的,而且在每次訪問完成后就會自動關閉該連接,所以造成再次訪問的時候,Connection conn已經關閉了。繼續晚上見主題四

總結

以上是生活随笔為你收集整理的JDBC读写oracle大字段BLOB的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。