为啥如果我向服务器上的数据库请求超过 100 行,但结果却一无所获?

Posted

技术标签:

【中文标题】为啥如果我向服务器上的数据库请求超过 100 行,但结果却一无所获?【英文标题】:Why if I request more than 100 rows to my database on the server do I get nothing as a result?为什么如果我向服务器上的数据库请求超过 100 行,但结果却一无所获? 【发布时间】:2021-09-02 02:46:47 【问题描述】:

我正在尝试将整个数据表从我的服务器接收到我的应用程序。我只需要在第一次访问时才能在设备上加载分配的表,并在将来使用新数据动态更新它。 我遇到的问题是该表由 600 行组成,当我从我的 php 文件中在 android 上的答案阅读器中生成 json 时,它是空的。我试图找到一种方法来接收整个表,但我无法解决,希望你能帮到我。

如果我将行的值减少到 100,我没有问题,但我不能全部发送,我想知道是否有其他方法可以接收整个表或更大的文件。

这是我在 applocation 中调用服务器和 php 文件以提取表的类:

 private String makeHttpRequestJsonListSpecific(String languageTOpass, String urlAdress) 
    String responce=null;
    Log.v(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific : SEND MY REQUEST....");
 tringBuffer data_post = new StringBuffer();
try 
        data_post.append(URLEncoder.encode("Language","UTF-8"));
        data_post.append("=");
        data_post.append(URLEncoder.encode(languageTOpass,"UTF-8"));
     catch (UnsupportedEncodingException e) 
        e.printStackTrace();
     
    String json = "";
    InputStream responseStream = null;
    String logMess = "";
    long startTime;
    long stopTime;
    long elapsedTime;

    try 

        byte[] postDataBytes = data_post.toString().getBytes("UTF-8");

        JSONObject Language_Json = new JSONObject();
        Language_Json.put("Language",languageTOpass);

        String Message_send = Language_Json.toString();
        Log.v(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific : IL VALORE DI Message_send...." + Message_send);
     URL url = new URL(urlAdress);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
    conn.setRequestProperty("Accept", "application/json");
    conn.setUseCaches(true);
    conn.connect();

    OutputStreamWriter request = new OutputStreamWriter(conn.getOutputStream());
    request.write(Message_send);
    request.flush();
    request.close();

        
        InputStream inputStream = (InputStream) conn.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: IL VALORE DI READR--- " + reader.toString());
        StringBuilder result = new StringBuilder();
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: IL VALORE DI RESULT--- " + result.toString());
        String line;
        
        while ((line = reader.readLine()) != null) 
            Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: SONO NEL CICLO DI SCRITTURA DELLA RISPOSTA--- " + conn);
            result.append(line).append("\n");
        
        json = result.toString();
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************ " );
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************ " );
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: THE DIMENSION OF THE RECEPTION : " + json.getBytes().length);
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************ " );
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************ " );
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************ " );
        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: RESOULT : " + json);

        conn.disconnect();

        Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: Connection --- " + conn);

     catch (IOException | JSONException e ) 
        Log.e(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific:ERROR MESSAGE --- " + e.getMessage());
        Log.e(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific:ERROR MESSAGE Cause --- " + e.getCause());
    
    return json;

这是我在服务器上生成 json 文件以发送到我的应用程序的 php 文件:

<? php 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL | E_STRICT);

$host ='localhost';
$username ='***';
$pwd ='**';
$db ='MYDB';
$responce =array();
$responce ["success"]= 0 ;
$responce ["message"]= "Error at start";
$json=file_get_contents('php://input');
$obj_json=json_decode($json,TRUE);
if(isset($obj_json))
   $language=$obj_json['Language'];
   $connect = mysqli_connect($host,$username,$pwd,$db) or die('Unabletp connect');
   if(mysqli_connect_error($connect))
    echo ("Fallita la connessione al data base".mysqli_connect_error());
    $responce ['success']=0;
    $responce ['message']="NO CONNECTION  NEW_SPECIFIC_PRODUCT";
else
        // I SET MY SEARCH QUERY
        // CHECK THAT THE LANGUAGE IS ITALIAN
        if(strcasecmp($language,"it")== 0)
            $sql_find = ("SELECT FAMILY_PRODUCT,CATEGORY_PRODUCT,SPECIFIC_PRODUCT,NAME_SPECIFIC FROM NEW_SPECIFIC_PRODUCT_IT;") ;
            $result= mysqli_query($connect,$sql_find) or  die ("Error: ". mysqli_error($connect)." with query ");
    if(mysqli_num_rows($result)> 0)
                $responce ["success"]= 1 ;
                $i=0;
                
                while ($row = mysqli_fetch_array($result))
                
                    $name_specific=$row["NAME_SPECIFIC"];
                    $result_array[$i]= array("FAMILY_PRODUCT" => $row["FAMILY_PRODUCT"],"CATEGORY_PRODUCT"  =>$row["CATEGORY_PRODUCT"],"SPECIFIC_PRODUCT" => $row["SPECIFIC_PRODUCT"],"NAME_SPECIFIC" => $name_specific);
                    $i++;
                
                
                $responce ['success']=1;
                $responce ['message']="I VALORI SONO STATI TROVATI";
                
                else
                # code...
                $responce ['success']=0;
                $responce ['message']="NO DATA IN  NEW_SPECIFIC_PRODUCT_IT";
            
        else
            // THE TELEPHONE LANGUAGE IS NOT ITALIAN
            echo ("IL VALORE DI language non è it.....".$language);
            $sql_find = ("SELECT * FROM NEW_SPECIFIC_PRODUCT_EN;") ;
            $result= mysqli_query($connect,$sql_find) or  die ("Error: ". mysqli_error($connect)." with query ");
            if(mysqli_num_rows($result)> 0)
                $responce ["success"]= 1 ;
                $i=0;
                while ($row = mysqli_fetch_array($result))
                    $result_array[$i]= array("FAMILY_PRODUCT" =>$row["FAMILY_PRODUCT"],"CATEGORY_PRODUCT"=>$row["CATEGORY_PRODUCT"],"SPECIFIC_PRODUCT"=>$row["SPECIFIC_PRODUCT"],"NAME_SPECIFIC"=>$row["NAME_SPECIFIC"]);
                    $i++;
                
                
            else
                # code...
                $responce ['success']=0;
                $responce ['message']="NO DATA IN  NEW_SPECIFIC_PRODUCT_EN";
            
                   
mysqli_close($connect);
array_push($responce,$result_array);

else
   $responce['success']=0;
   $responce['message']="Parameters are not correct";
echo json_encode($responce);
 
header('Content-type:application/json');
echo json_encode($responce);
   ?>

当我去验证我发送的 json 时,结果是空的,当我没有收到任何东西时,是否有另一种方法可以接收整个表? 提前感谢您的帮助。

我根据需要添加日志文件:

GetSpecificListFromServer: makeHttpRequestJsonListSpecific: IL VALORE DI READR--- java.io.BufferedReader@---
GetSpecificListFromServer: makeHttpRequestJsonListSpecific: IL VALORE DI RESULT--- 
GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************ 
GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************ 
GetSpecificListFromServer: makeHttpRequestJsonListSpecific: LA DIMENSIONE DELLA RICEZIONE : 0
GetSpecificListFromServer: makeHttpRequestJsonListSpecific: ************************************************************

【问题讨论】:

Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: IL VALORE DI READR--- " + reader.toString()); reader.toString() 应该提供什么?请告知记录的内容。 ` 我添加了日志文件,但我不明白你为什么要马上给我的问题打负分? Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: IL VALORE DI RESULT--- " + result.toString()); 这没有任何意义,因为字符串生成器中还没有任何内容。请将语句移到 while 循环之后。请报告。 您为什么不告诉我们记录的内容:Log.d(TAG, "GetSpecificListFromServer: makeHttpRequestJsonListSpecific: SONO NEL CICLO DI SCRITTURA DELLA RISPOSTA--- " + conn); ?和康?错字?那应该是行。看起来好像没有读取任何一行。请调查。这是初级的。基本调试。 'GetSpecificListFromServer: makeHttpRequestJsonListSpecific: IL VALORE DI RESULT--- ' 我按照你说的移动了结果是这样的,总是空的 【参考方案1】:

我已经找到问题的解决方案并报告它,以便如果它对某人有用,他们可以使用它。 经过多次检查后,我注意到问题是我的 Json 不是在我的 php 文件中创建的,因此使用由字符串值组成的数据库的一部分我尝试通过立即添加此代码来检查 Json 生成错误鼠标生成json:

echo json_encode($responce);
switch (json_last_error()) 
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_STATE_MISMATCH:
        echo ' - Underflow or the modes mismatch';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_UTF8:
        echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
    break;
    default:
        echo ' - Unknown error';
    break;

 echo PHP_EOL;

从这次验证中发现,我的错误属于“格式错误的 UTF-8 字符,可能编码不正确” 所以我在提取我的查询结果之后插入一个 UTF-8 解码,然后将它插入我的答案数组,然后我将在 Json 中编码。 这使我能够正确地创建我的 Json 并克服不允许编码的特定字符所规定的块。

$name_specific=utf8_encode($row["NAME_SPECIFIC"]);

希望能帮到和我同区的朋友,谢谢大家。

【讨论】:

以上是关于为啥如果我向服务器上的数据库请求超过 100 行,但结果却一无所获?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以增加 CloudFlare 超时?

如何通过 Autodesk Forge 上的数据管理 API 上传超过 100MB 的大文件?

移动设备上的表格行不会超过100%的宽度

为啥我向主题发送 Firebase 通知的请求不起作用(HTTP POST)?

为啥数据透视表无法刷新数据

为啥不响应代理请求