2014-01-29 36 views
0

我試圖插入指紋數據從我的表單到數據庫,但我得到了以下異常,插入手指打印數據的SQLServer 2008

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) 

我知道我有一個錯誤的方式實現序列化機制,但我不知道該怎麼做,

這裏是我做了什麼代碼,

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, 

在Person類

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(); 
    } 
    } 

的數據類型指紋數據庫的大小爲1024, 的VARBINARY,我在系列化概念新,所以如果有人能告訴我該怎麼辦,

我使用的數字人URU 4000 b,有一點觸式的SDK的Java API

+2

我不認爲這與序列化有任何關係。數據庫返回的錯誤非常明顯。您嘗試插入的值之一大於其對應列的大小。 –

+0

所有其他字段在GUI中有約束,該用戶不能輸入大於指定大小的數據,唯一動態是字節[],並且我已經爲此設置了大小爲1024的VarBinary,這是不夠的嗎? –

+0

這是System.out.println(fpt);輸出到CMD [B @ 98adae2 –

回答

0

由於阿米爾Keibi說,那是不是與序列化的問題,實際問題是機智h DataBase中FPT列的大小,我將它從1024增加到2000,一切正常。 現在我可以在DataBase中保存指紋了。