怎么用kettle读取mysql数据库的二进制日志

怎么用kettle读取mysql数据库的二进制日志,第1张

可以。

通过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怎样读取数据库中的二进制图片并下载到本地磁盘等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9303817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存