image类型字段更新出错
急啊,各位老大,帮帮忙 !!
主要代码如下:
我更新数据库image类型字段,当数据库有一条合乎要求的数据更新时,没有问题,它会把对应的图片插入对应的记录,但是当有两条合乎要求的记录要更新时,它就会把第二张图片插入到要更新的第一条记录的字段,而第二条记录更新不了图片字段,即是它把本该插入第二条记录的图片插入到第一条条要更新的数据里面了.请教各位,是什么原因.急,搞了很多天了.
问题:
import java.util.*;
import java.text.*;
import java.io.*;
import java.net.*;
import com.ionglobal.lib.*;
import com.ionglobal.db.*;
import com.ionglobal.misc.*;
import java.sql.*;
//两个表在人事库.
public class imageSupplySync {
private static MyLogger logger = (MyLogger) MyLogger
.getInstance(imageSupplySync.class.getName());
// public static String student2databasename = "student2 ";
public static void main(String[] args) {
try {
DBI dbi = new DBI(); // 党务系统dbi 数据库 : student
DBI dbi1 = new DBI(1); // 人事系统dbi 数据库 : student2
try {
SysEnv.setDBPoolFlag( "0 ");
SysEnv.setDBPoolFlag( "0 ", 1);
tranimage(dbi, dbi1); // 图片更新
System.out.println();
} catch (Exception E) {
System.out.println( "Error: " + E.getMessage());
} finally {
dbi.closeAll();
dbi1.closeAll();
}
} catch (Exception E) {
System.out.println( "Error: " + E.getMessage());
}
}
public static void tranimage(DBI dbi, DBI dbi1) throws SysException {
log( "开始同步数据... ");
String id = " ";
String name = " ";
int cnt = 0;
int i = 0;
String sql5 = " ";
String sql = " ";
String sqlimage2 = " ";
String sqlimagecnt = " ";
String A0100 = " "; // 党务关联字段
int A0188 = 0; // 人事关联字段
sql = "select count(*) cnt from A01 where AGB006!= ' ' and AGB006 is not null "; // 党务
dbi.execQuery(sql);
if (dbi.rsNext())
cnt = dbi.rsGetInt( "cnt ");
dbi.rsClose();
log( "一共同步信息数量 : " + cnt);
if (cnt > 0) { // ***
sqlimagecnt = "select A0100,A0101,AGB006 from A01 where AGB006!= ' ' and AGB006 is not null "; // 党务
//log( "sqlimagecnt : "+sqlimagecnt);
dbi.execQuery(sqlimagecnt);
while (dbi.rsNext()) {
name = dbi.rsGetString( "A0101 ").trim();
id = dbi.rsGetString( "AGB006 ").trim();
sql5 = "select A0188 from A01 where A0190= ' " + id
+ " ' and A0101= ' " + name + " ' "; // 查人事的表 A01
dbi1.execQuery(sql5);
while (dbi1.rsNext()) {
A0188 = dbi1.rsGetInt( "A0188 ");
log( "人事关联字段A0188 " + A0188);
}
dbi1.rsClose();
sqlimage2 = "SELECT student2..C11.C1101 "
+ "FROM student..D01 RIGHT OUTER JOIN "
+ "student..depart_party_code ON "
+ "student..D01.D0107 = student..depart_party_code.partycode RIGHT OUTER JOIN "
+ "student2..A04 RIGHT OUTER JOIN "
+ "student2..A01 ON student2..A04.A0188 = student2..A01.A0188 ON "
+ "student..depart_party_code.point = student2..A01.A01137 LEFT OUTER JOIN "
+ "student2..C11 ON student2..A01.A0188 = student2..C11.A0188 LEFT OUTER JOIN "
+ "student2..C120 ON student2..A01.A0188 = student2..C120.A0188 LEFT OUTER JOIN "
+ "student..paylevel_money RIGHT OUTER JOIN "
+ "student2..C115 ON student..paylevel_money.paylevel =student2..C115.C0107 ON "
+ "student2..A01.A0188 = student2..C115.A0188 LEFT OUTER JOIN "
+ "student2..A64 ON student2..A01.A0188 = student2..A64.A0188 "
+ "WHERE student2..A01.A0188 = ' " + A0188
+ " ' AND student2..A01.A0101 = ' " + name + " ' ";
// 跨库,关联D01
dbi.execQuery(sqlimage2);
if (dbi.rsNext()) { // *
log( "相片的处理 存在本地完毕 ");
i++;
InputStream in1 = dbi.rsGetBinaryStream( "C1101 "); // 照片
saveImage(in1);
updateimage(dbi, id, name);
}
dbi.rsClose();
}
dbi.rsClose();
}
}
//保存相片到本地
public static void saveImage(InputStream in1) {
try {
com.ionglobal.fms.FileManager.saveFile(in1, "d:/test.jpg "); // 把大字段内容保存到文件
//com.ionglobal.fms.FileManager.saveFile(in1,imagename); // 把大字段内容保存到文件
in1.close();
} catch (Exception E) {
System.out.println(E.getMessage());
} finally {
try {
if (in1 != null) {
log( "in1 is not null,so close ! ");
in1.close();
}
} catch (Exception e) {
}
}
log( "相片的处理存在本地完毕 ");
}
//更新图片
public static void updateimage(DBI dbi, String id, String name) {
InputStream in = null;
String sqlimageupdate = " ";
sqlimageupdate = "update student..A01 set student..A01.A0119=? where student..A01.A0101= ' "
+ name + " ' and student..A01.AGB006= ' " + id + " ' ";
log( "id and name is : "+id+ " "+name);
log( "sqlimageupdate : " + sqlimageupdate);
try {
PreparedStatement p_stmt = dbi.getPreparedStatement(sqlimageupdate);
File file = new File( "d:/test.jpg ");
//log( "imagename : "+imagename) ;
if (file.length() > 0) {
in = new FileInputStream(file);
p_stmt.setBinaryStream(1, in, new Long(file.length())
.intValue()); // 设置字段bFile
//p_stmt.setString(2,name); // 设置字段bFile
//log( "name : "+name) ;
log( "相片大小 : " + file.length());
p_stmt.execute();
in.close();
}
//in.close();
file = null;
log( "设file=null ");
p_stmt.close();
log( "更新 ");
//file.close();
} catch (Exception e) {
log( "Error: " + e.getMessage());
}
log( " 更新照片字段完毕 ");
}
public static void log(String message) {
System.out.println(message);
}
public static void logNoLine(String message) {
System.out.print(message);
}
}
[解决办法]
太长没看。
分两次分别更新就行了。
[解决办法]
如果有两条记录,选出行数最大的那条去更新,改一下sql语句就可以实现,你试一下