java preparedstatement update,Java JDBC - PreparedStatement executeUpdate()始终返回1

目前我正在研究java中的代码,该代码从位于各种文件夹中的 XML 文件中检索 data ,然后将文件本身和检索到的数据上传到 SQL-server Database . 我不想将任何重复的XML文件上传到数据库,但由于文件可以随机命名我使用 Hash 来检查即将上传的每个文件,我将文件上传到下表:

XMLFiles

CREATE TABLE [dbo].[XMLFiles](

[PathID] [int] NOT NULL,

[FileID] [int] IDENTITY(1,1) NOT NULL,

[XMLFileName] [nvarchar](100) NULL,

[FileSize] [int] NULL,

[FileData] [varbinary](max) NULL,

[ModDate] [datetime2](7) NULL,

[FileHash] [nvarchar](100) NULL,

CONSTRAINT [PK_XMLFiles] PRIMARY KEY CLUSTERED

(

[FileID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

我用来上传文件的代码如下:

public int UploadFile

public int UploadFile(String Path,int pathID) throws SQLException, SAXException, IOException {

int ID=-1;

String hash;

int len,rowCount=0;

String query;

PreparedStatement pstmt;

try {

File file = new File(Path);

hash=XMLRead.getFileChecksum(file);

FileInputStream fis = new FileInputStream(file);

len = (int) file.length();

query = (" IF NOT EXISTS "

+ " (SELECT 1"

+ " FROM XMLFiles"

+ " WHERE FileSize="+len+" AND FileHash='"+hash+"')"

+ " BEGIN"

+ " INSERT INTO XMLFiles (PathID,XMLFileName,FileSize,FileData,ModDate,FileHash) "

+ " VALUES(?,?,?,?,GETDATE(),?)"

+ " END;");

pstmt = Con.prepareStatement(query);

pstmt.setInt(1, pathID);

pstmt.setString(2, file.getName());

pstmt.setInt(3, len);

pstmt.setBinaryStream(4, fis, len);

pstmt.setString(5, hash);

rowCount=pstmt.executeUpdate();

System.out.println("ROWS AFFECTED:-"+rowCount);

if (rowCount==0){

System.out.println("THE FILE: "+file.getName()+"ALREADY EXISTS IN THE SERVER WITH THE NAME: ");

System.out.println(GetFilename(hash));

}

} catch (Exception e) {

e.printStackTrace();

}

return rowCount;

}

我执行程序有28个文件,其中4个是重复文件,但名称不同,我知道代码工作正常,因为在每次执行结束时只上传了24个唯一文件,问题是即时通讯使用 rowCount 检查文件是否上传,如果文件没有上传,因为它是一个重复的文件我没有将 file 的 file 也没有上传到数据库,就像这样(以下代码是一个片段,用于说明我正在做的工作):

int rowCount=UploadFile(Path,pathID);

if (rowCount==1){

//UPLOAD DATA

}

问题是方法 UploadFile 中的 executeUpdate() 总是返回 1 ,即使 database 中哪些行没有受到影响,这里有什么东西我不知道吗?我找不到我的代码有什么问题,是不是我做的那个 IF NOT EXISTS comprobation返回 1 ?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值