每次导入都要对每条数据进行检查,会有一下三种情况:
10年积累的成都网站建设、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有环翠免费网站建设让你可以放心的选择与我们合作。
1.excel里有,oracle里也有,那么,执行update操作。
2.excel里有,oracle里没有,那么,执行insert操作。
3.excel里没有,oracle里有,那么,执行什么操作就要看你的需求了,删除或者修改状态什么的。
先把文件读取到内存,再以二进制格式保持到数据库中的大字段中(clob或clob)。
写大对象。
Java code
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
OutputStream os = null;
FileInputStream fis = null;
int bs = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","---");
conn.setAutoCommit(false);
stat = conn.createStatement();
stat.executeUpdate("insert into t_video(id,video) values(1,empty_blob())");
rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
os = blo.getBinaryOutputStream();
bs = blo.getBufferSize();
fis = new FileInputStream("D:\\Temp\\MPlayer-CVS-20040808-KK\\mplayer.exe");
byte[] buf = new byte[bs];
int length = 0;
while(true)
{
length = fis.read(buf);
if(length == -1) break;
os.write(buf,0,length);
}
os.close();
os = null;
fis.close();
fis = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
读大对象
Java code
InputStream is = null;
FileOutputStream fos = null;
byte[] buf = null;
int bs = 0;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB","bigfou","-");
conn.setAutoCommit(false);
stat = conn.createStatement();
rs = stat.executeQuery("select video from t_video where id = 1");
rs.next();
oracle.sql.BLOB blo = (oracle.sql.BLOB)rs.getBlob(1);
bs = blo.getBufferSize();
buf = new byte[bs];
int length = 0;
is = blo.getBinaryStream();
fos = new FileOutputStream("d:\\test.exe");
while(true) {
length = is.read(buf);
if(length == -1) break;
fos.write(buf,0,length);
}
fos.close();
fos = null;
is.close();
is = null;
conn.commit();
conn.setAutoCommit(true);
conn.close();
...
存储过程不能发邮件,邮件可以通过向表内插入数据,然后通过数据再调动外部程序进行发送。oracle内部程序本身没有发送邮件的功能。 现在一般是建立外部流程发邮件。
方法如下:
declare
v_file_id NUMBER;
url VARCHAR2(500);
begin
--Get the file_id of the file which you want to download in fnd_lobs
v_file_id := xxxxxx;
--Get The Download URL
url := fnd_gfm.construct_download_url(fnd_web_config.gfm_agent,v_file_id,TRUE);
fnd_utilities.open_url(url);
end;
以上的方法就可以轻松的实现下载存储在fnd_lobs中的文件,只要告诉fnd_gfm.construct_download_url在fnd_lobs表中文件的file_id,就可以轻松取得URL,使用fnd_utilities.open_url就可以下载该文件。不过现在还有一个问题就是要在工作流发送的消息找到一个东西(比如说一个按钮、超链接)来执行下载文件的方法,请教顾问也没得到比较好的方法,无奈只好硬着头够尝试,在多次尝试之后找到了可以在document类型的ATTRIBUTE里设置一个超链接,然后让这个超链接的地址指向我已经取得的下载文件的URL,问题终于得以解决。
采用winform实现需要的功能,首先在数据库中建表,其中一个字段为Blob类型,怎么创建就不说了。思路很简单,就是文件流读取电脑上的文件,然后通过insert语句将文件的字节流数组存进表中,代码如下:
//通过Stream读取文件,并转换为byte数组
Stream
stream
=
File.Open(ChoosedFilePaths[i],
FileMode.Open,
FileAccess.Read,
FileShare.Read);
byte[]
buffer
=
new
byte[stream.Length];
stream.Read(buffer,
0,
buffer.Length);
string
constr
=
ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
OracleConnection
conn
=
new
OracleConnection(constr);
OracleParameter
param
=
null;
OracleCommand
cmd
=
new
OracleCommand();
cmd.Connection
=
conn;
cmd.CommandText
=
"insert
into
FJG_FILE_MANAGE(NUMBERS,FILE_NAME,FILECONTENT)
VALUES('"
+
attributes.Number
+
"','"
+
attributes.FileName
+
"',:contents,'")";
param
=
new
OracleParameter("contents",
OracleType.Blob,
buffer.Length);
param.Value
=
buffer;
cmd.Parameters.Add(param);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch(System.Exception
e)
{
log.Append("上传状态:t失败!rn"
+
"失败原因:t"
+
e1.Message
+
"rnrn");
}
finally
{
cmd.Close();
}
本来采用的是OleDb,后来测试发现不好使,好像是Provider的问题,然后改为OracleClient来进行上传,OracleClient不需要Provider。
关键是sql语句中Blob字段的参数要写成“:ParameterName”的形式。