匹配手指数据时出错

时间:2017-04-23 23:19:09

标签: java mysql fingerprint

我目前正在开发一个简单的java项目,我正在从用户扫描指纹,将其转换为字符串,使用Text将其存储在数据库(MySQL)中,从数据库中检索它们并将其与新的指纹进行比较以执行匹配操作。问题出在同一个人身上,它不能识别指纹数据。 为了捕获手指数据,我正在使用Mantra的MFS100指纹设备! 这是代码捕捉:

byte[] ISOTemplate = null;

/* Finger data contains
 * byte[] ISOTemplate;
 */

FingerData data = new FingerData();

/*It will now scan fingerprints from device*/

int ret = mfs100.AutoCapture(data,timeout,false,false);

//Initializing local ISOTemplate
ISOTemplate = new byte[data.ISOTemplate().length];
System.arraycopy(data.ISOTemplate(), 0, ISOTemplate, 0, data.ISOTemplate().length);

//Storing it in database
String str = new String(ISOTemplate);
Connection con = (Connection) 
DriverManager.getConnection("jdbc:mysql://localhost:3306/db","user","pass");
PreparedStatement ps = con.prepareStatement("update datatable set fingerscan = ? where empID like '123'");
ps.setString(1,str);
ps.executeUpdate();

直到这里,一切正常。问题出在这里:

PreparedStatement ps = con.prepareStatement("select fingerscan from datatable where empID like '123'");            
ResultSet rs = ps.executeQuery();
while(rs.next()){
       String tmp = rs.getString("fingerscan");
       ISOTemplate = tmp.getBytes();
}

//captures new data from user
int ret = mfs100.AutoCapture(data, timeout,  false, false);
if(ret == 0){
    int score = 0;
    score = mfs100.MatchISO(data.ISOTemplate(), ISOTemplate);                
    System.out.println("Score:"+score);
    if(score > 14000){
    Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Success:"+score, ButtonType.OK);
    alert.show();
    }else if (score >= 0 && score < 14000) {
    Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Failure:"+score, ButtonType.OK);
    alert.show();
    }   
 } 

根据设备规格,匹配分数应大于14000.但在我的情况下,分数仅为1300左右。 我试过这个:

How to save "Finger Print" in database

但仍然得分低于14000。

我知道问题是当我将手指数据存储在mysql数据库中时,数据变得无用。 所以请建议我将手指数据存储到数据库中的一些方法。 请帮助我提高比赛得分。

1 个答案:

答案 0 :(得分:0)

不要将你的字节数组转换为字符串。

在MySQL中

创建一个BLOB类型

的列

保存模板

在Java中使用PreparedStatement的setBytes方法

PreparedStatement ps = con.prepareStatement("update datatable set fingerscan = ? where empID like '123'");
ps.setBytes(1,ISOTemplate);
ps.executeUpdate();

获取模板

在Java中使用ResultSet的getBytes方法

PreparedStatement ps = con.prepareStatement("select fingerscan from 
datatable where empID like '123'");            
ResultSet rs = ps.executeQuery();
while(rs.next()){
   String tmp = rs.getBytes(1);
   ISOTemplate = tmp.getBytes();
}