首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

image类型字段更新出错解决方法

2012-01-06 
image类型字段更新出错急啊,各位老大,帮帮忙!!主要代码如下:我更新数据库image类型字段,当数据库有一条合

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语句就可以实现,你试一下

热点排行