Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将指纹数据插入SQLServer2008_Java_Sql Server 2008_Serialization_Fingerprint - Fatal编程技术网

Java 将指纹数据插入SQLServer2008

Java 将指纹数据插入SQLServer2008,java,sql-server-2008,serialization,fingerprint,Java,Sql Server 2008,Serialization,Fingerprint,我试图将指纹数据从我的表单插入数据库,但我遇到以下异常 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.jd

我试图将指纹数据从我的表单插入数据库,但我遇到以下异常

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,
数据库中指纹的数据类型为VarBinary,大小为1024, 我不熟悉序列化概念,所以如果有人能告诉我怎么做


我使用的是Digital Persona URU 4000 b和Java API的One touch SDk,正如Amir Keibi所说,这不是序列化的问题,实际的问题是数据库中FPT列的大小,我将其从1024增加到2000,一切正常。
现在我可以在数据库中保存指纹了。

我认为这与序列化无关。从数据库返回的错误很明显。您尝试插入的一个值大于其对应列的大小。GUI中的所有其他字段都有限制,用户不能输入大于指定大小的数据,唯一的动态是字节[],我为此设置了大小为1024的VarBinary,这还不够吗?这是System.out.println(fpt); 输出到cmd[B@98adae2And当我注释掉InsertQuery中的指纹数据时,一切都很好,“println”调用fpt数组上的“toString”,fpt数组从对象继承其实现。请尝试“Arrays.toString(fpt)”打印字节数组的实际值。或者更好的方法是调试代码并找出fpt的实际大小。
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();
    }
    }