可以。
通过kettle自带的控件实现,很简单,主要就是控件属性的设置。
该示例测试mysql的结果是:文件入库没问题,入到mysql能正常使用,但从mysql读取出来输出到文件系统就不能打开了,文件大小还是与原文件相同的,可能还需要修改什么设置吧。
mystr = AppPath & "\结果\" & "cll"
你这里要给文件起一个名称啊,哪怕是随机的名字也可以啊,比如
mystr = AppPath & "\结果\文件名字自己改cll"
或者
mystr = AppPath & "\结果\" & Int(Rnd 100000) & "cll"
/
Created by IntelliJ IDEA
User: ljt
Date: 2003-3-31
Time: 18:51:38
To change this template use Options | File Templates
/
import oraclejdbcdriverOraclePreparedStatement;
import oraclejdbcdriverOracleResultSet;
import javasqlConnection;
import javasqlDriverManager;
import javasqlStatement;
import javasqlClob;
public class TestOpenDoc {
public OracleResultSet ors = null; //这里rs一定要用Oracle提供的
public OraclePreparedStatement opst = null; //PreparedStatement用
public Connection conn = null;
public Statement stmt = null;
public TestOpenDoc() {
}
public boolean getConnect() {
//这是我的数据库所在
String serverName = "prosrv";
try {
ClassforName("oraclejdbcdriverOracleDriver");
String url = "jdbc:oracle:thin:@" + serverName + ":1521:BOHDATA";
conn = DriverManagergetConnection(url, "appuser", "appuser");
}
catch (Exception e) {
Systemoutprintln(e);
return false;
}
return true;
}
public static void main(String[] args) {
TestOpenDoc test = new TestOpenDoc();
if (!testgetConnect()) {
Systemoutprintln("数据库连结错误");
return ;
}
try{
testconnsetAutoCommit(false);
byte a[] = null; //将测试文件testdoc读入此字节数组
javaioFileInputStream fin = null;
javaioFileOutputStream fout = null;
//Oracle提供的
try {
javaioFile f1 = new javaioFile("c:/testdoc");
javaioFile f2 = new javaioFile("d:/testoutdoc"); //从BLOB读出的信息写
//入该文 件,和源文件对比测试用
fin = new javaioFileInputStream(f1);
fout = new javaioFileOutputStream(f2);
int flength = (int) f1length(); //读入文件的字节长度
Systemoutprintln("file length::" + flength);
a = new byte[flength];
int i = 0;
int itotal = 0;
// 将文件读入字节数组
for (; itotal < flength; itotal = i + itotal) {
i = finread(a, itotal, flength - itotal);
}
finclose();
Systemoutprintln("read itotal::" + itotal);
//注意Oracle的 BLOB一定要用EMPTY_BLOB()初始化
String mysql =
"insert into filelist (FileName,FileSize,FileBody) values (,,EMPTY_BLOB())";
OraclePreparedStatement opst = (OraclePreparedStatement) testconn
prepareStatement(mysql);
opstsetString(1, "wordtemplate2");
opstsetInt(2, flength);
opstexecuteUpdate();
opstclearParameters();
// /插入其它数据后,定位BLOB字段
mysql = "select filebody from filelist where filename=";
opst = (OraclePreparedStatement) testconnprepareStatement(mysql);
opstsetString(1, "wordtemplate2");
OracleResultSet ors = (OracleResultSet) opstexecuteQuery();
if (orsnext()) {
oraclesqlBLOB blob = orsgetBLOB(1); //得到BLOB字段
int j = blobputBytes(1, a); //将字节数组写入BLOB字段
Systemoutprintln("j:" + j);
testconncommit();
orsclose();
Clob clob;
clob = orsgetClob("");
String str;
str = clobtoString();
str = clobgetSubString(0L,(int)cloblength());
Systemoutprintln(str);
}
Systemoutprintln("insert into ok");
byte b[] = null; //保存从BLOB读出的字节
opstclearParameters();
mysql = "select filebody from filelist where filename=";
opst = (OraclePreparedStatement) testconn
prepareStatement(mysql);
opstsetString(1, "wordtemplate2");
ors = (OracleResultSet) opstexecuteQuery();
if (orsnext()) {
oraclesqlBLOB blob2 = orsgetBLOB(1);
Systemoutprintln("blob2 length:" + blob2length());
b = blob2getBytes(1, flength); //从BLOB取出字节流数据
Systemoutprintln("b length::" + blength);
testconncommit();
}
orsclose();
// 将从BLOB读出的字节写入文件
foutwrite(b, 0, blength);
foutclose();
Systemoutprintln("write itotal::" + blength);
}
catch (Exception e) {
Systemoutprintln("errror :" + etoString());
eprintStackTrace();
}
finally { //关闭所有数据联接
testconncommit();
}
}
catch(Exception e){
Systemoutprintln(e);
}
}
}
1将Image图像文件存入到数据库中
我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中
要这里有关数据的 *** 作略写,我将一些代码段写成方法,方便直接调用
//根据文件名(完全路径)
public byte[] SetImageToByteArray(string fileName)
{
FileStream fs = new FileStream(fileName, FileModeOpen);
int streamLength = (int)fsLength;
byte[] image = new byte[streamLength];
fsRead(image, 0, streamLength);
fsClose();
return image;
}
//另外,在ASPNET中通过FileUpload控件得到的图像文件可以通过以下方法
public byte[] SetImageToByteArray(FileUpload FileUpload1)
{
Stream stream = FileUpload1PostedFileInputStream;
byte[] photo = new byte[FileUpload1PostedFileContentLength];
streamRead(photo, 0, FileUpload1PostedFileContentLength);
streamClose();
return photo;
}
2从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件
//要使用SqlDataReader要加载using SystemDataSqlClient命名空间
//将数据库中的Image类型转换成byte[]
public byte[] SetImage(SqlDataReader reader)
{
return (byte[])reader["Image"];//Image为数据库中存放Image类型字段
}
//将byte[]转换成Image图像类型
//加载以下命名空间using SystemDrawing;/using SystemIO;
using SystemDataSqlClient;/
public Image SetByteToImage(byte[] mybyte)
{
Image image;
MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyteLength);
image = ImageFromStream(mymemorystream);
return image;
}
编码格式问题吧
看你写入数据库用的什么编码格式了
如果ASCII:
string info = SystemTextEncodingASCIIGetString(data );
如果UTF8:
string info = SystemTextEncodingUTF8GetString(data );
然后再把info写入文件中,就不用说了吧
写:
说明:QueryFile字段为blod类型
private bool SaveQuery(String content)
{
byte[] byts = new SystemTextUnicodeEncoding()GetBytes(content);
assistant ast = new assistant();
MySqlParameter[] param = new MySqlParameter[5];
TimeSpan nowtimespan = new TimeSpan(DateTimeNowTicks);
param[0] = new MySqlParameter("@CQID", nowtimespan);
param[1] = new MySqlParameter("@userID", Session["OfficerID"]ToString());
param[2] = new MySqlParameter("@QueryFile", byts);
param[3] = new MySqlParameter("@filename", filenameText);
param[4] = new MySqlParameter("@fcomment", CommentText);
astinsertCQ(param);
return true;
}
读:
说明:2为blod数据类型的索引
protected void setSelect(String uderid)
{
String sqlcommand = StringFormat("select from CustomQuery where CQID='{0}'", uderid);
MySqlDataReader msr = dh getReader(sqlcommand,null);
msrRead();
Byte[] blob = new Byte[(msrGetBytes(2, 0, null, 0, intMaxValue))];
msrGetBytes(2, 0, blob, 0, blobLength);
msrClose();
msrDispose();
String xmlStr = EncodingUnicodeGetString(blob);
queryLoadFromString(xmlStr);
}
最简单就是:选出blob数据到DataTable强制类型转化为Byte[]再用 EncodingUnicodeGetString(Byte[],)转化。
以上就是关于怎么用kettle读取mysql数据库的二进制日志全部的内容,包括:怎么用kettle读取mysql数据库的二进制日志、vb如何存取mdb数据库中的长二进制数据、Java怎样读取数据库中的二进制图片并下载到本地磁盘等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)