我正在尝试将指纹数据从我的表单插入DataBase,但我有以下例外,
com.microsoft.sqlserver.jdbc.SQLServerException: String or binary data would be truncated.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
我知道我已经以错误的方式实现了序列化MeChanism,但我不知道该怎么做,
以下是我做过的代码,
public void setPerson(){
tfcNIC.setText(tfcnic1.getText()+tfcnic2.getText()+tfcnic3.getText());
Person p = new Person();
p.setName(tfname.getText());
p.setFname(tfFname.getText());
p.setAddr(tfaddr.getText());
p.setCnic(tfcNIC.getText());
p.setfPrint(((MainForm)getOwner()).getTemplate().serialize()); <--- My Stupid Serialization Step,
在个人班级
public void setfPrint(byte[] fp){
fPrint = fp; <----- Setter method for Finger Print Of Person
}
将数据插入数据库
public void setPersonStatement(String nm,String fn,String cn,String add, byte[] fpt) {
String Sql = "INSERT INTO PERSON (NAME, FNAME, CNIC, ADDR, FPT) VALUES ( ?,?,?,?,?)";
try {
if(con==null){
System.out.println("Connection error");
}
else {
System.out.println("Connection ok");
}
pst2=con.prepareStatement(Sql);
System.out.println(nm);
pst2.setString(1, nm);
pst2.setString(2, fn);
pst2.setString(3, cn);
pst2.setString(4, add);
pst2.setBytes(5, fpt);
pst2.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("SQL Error");
e.printStackTrace();
}
}
DataBase中的指纹数据类型为VarBinary,大小为1024, 我是序列化概念的新手,所以如果有人能告诉我该做什么,
我正在使用Digital Persona URU 4000 b和那里的一键式SDK for Java API
答案 0 :(得分:0)
正如Amir Keibi所说,这不是序列化的问题,实际问题是数据库中FPT列的大小,我从1024增加到2000并且一切工作正常。 现在我可以在DataBase中保存指纹。