Я занимаюсь разработкой Java-приложения, в котором у меня есть база данных, хранящаяся на каком-либо сервере хостинга веб-сайта (000webhost), и я написал код для извлечения данных с сервера базы данных (MySQL) в файле PHP, размещенном на веб-сайте.
Вот код для того же:
//http://mahaweb.ml/java.php
<?php
require "connect.php";
$db = $_POST["db"];
mysqli_select_db($con,$db);
$mysql_qry = $_POST["query"];
$result = mysqli_query($con,$mysql_qry);
if(mysqli_num_rows($result) > 0){
while($row=mysqli_fetch_row($result)){ // for each row in results
foreach($row as $value){ // for each column in row
echo $value.'|';
}
}
}
else
echo 'null';
?>
Java-код для чтения данных из php-файла:
public static String getData(String query,String db){
HttpURLConnection conn=null;
String inputLine = null,result = null;
try{
URL url=new URL("http://mahaweb.ml/java.php");
conn=(HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
String postData = URLEncoder.encode("db","UTF-8")+"="+URLEncoder.encode(db,"UTF-8")+"&"+URLEncoder.encode("query","UTF-8")+"="+URLEncoder.encode(query,"UTF-8");
OutputStream out=conn.getOutputStream();
out.write(postData.getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while((inputLine=in.readLine())!=null){
StringBuffer tmp1 = new StringBuffer(inputLine);
tmp1.deleteCharAt(tmp1.length()-1);
result = tmp1.toString();
}
in.close();
}catch(Exception e){
e.printStackTrace();
}finally{
conn.disconnect();
}
if(result.equals("null"))
return null;
return result;
}
Я храню отпечатки пальцев в базе данных, используя столбец BLOB-объектов, который содержит значения отпечатков в байтовом формате.
Когда я использую соединитель jdbc для получения данных из базы данных и сопоставления этих данных с отпечатками пальцев, он успешно совпадает, код здесь для того же:
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/dlap_application",user,pass);
PreparedStatement ps = con.prepareStatement("select fingerscan from login where empID like 'MH1200001'");
ResultSet rs = ps.executeQuery();
while(rs.next())
ISOTemplate = rs.getBytes("fingerscan");
ps.close();
rs.close();
con.close();
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();
}
}
else{
Alert alert = new Alert(Alert.AlertType.INFORMATION, "Return Code:"+ret+" "+mfs100.GetLastError(), ButtonType.OK);
alert.show();
}
Но когда я использую PHP-код для извлечения данных из базы данных, он получает данные, но в строковом формате.
Я преобразовываю эти строковые данные в байты и пытаюсь сопоставить их с новыми данными отпечатков пальцев, но не получаю никакого успеха, потому что данные теряются во время преобразования строки в пока.
Итак, как мне получить данные из базы данных, используя PHP в байтовом формате без потери данных?
Задача ещё не решена.
Других решений пока нет …