【问题标题】:Inserting Finger Print Data To SQLServer 2008将指纹数据插入 SQL Server 2008
【发布时间】:2014-01-29 03:27:54
【问题描述】:

我正在尝试将我的表单中的指纹数据插入数据库,但出现以下异常,

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,

个人类

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 以及用于 Java API 的一键式 SDK

【问题讨论】:

  • 我认为这与序列化无关。从数据库返回的错误非常清楚。您尝试插入的值之一大于其对应列的大小。
  • 所有其他字段在 GUI 中都有约束,用户不能输入大于指定大小的数据,唯一动态的是字节 [],我为此设置了大小为 1024 的 VarBinary,是一个还不够吗?
  • 这是 System.out.println(fpt);输出到 cmd [B@98adae2
  • 当我从 InsertQuery 中注释掉指纹数据时,一切正常
  • “println”在 fpt 数组上调用“toString”,它从 Object 继承了它的实现。而是尝试“Arrays.toString(fpt)”来打印字节数组的实际值。或者更好的是调试代码并找出 fpt 的实际大小。

标签: java sql-server-2008 serialization fingerprint


【解决方案1】:

正如 Amir Keibi 所说,这不是序列化的问题,实际问题是数据库中 FPT 列的大小,我将其从 1024 增加到 2000,一切正常。 现在我可以在数据库中保存指纹了。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多