【问题标题】:Android ArrayIndexOutOfBoundsException in inserting rows to mysql [duplicate]Android ArrayIndexOutOfBoundsException 在将行插入到 mysql [重复]
【发布时间】:2013-12-13 07:50:32
【问题描述】:

我在向 mysql 表中插入行时出错。

记录来自我本地的 sqlite 数据库。我目前有两条记录,想将它们插入 mysql db。

下面是我正在处理的代码:

    String[] arrDocumentNumber, arrTransactionDate, arrItemCode;

    arrDocumentNumber = dbHelper.getAllDocumentNumbersFromOUTTRANS();
    arrTransactionDate = dbHelper.getAllTransactionDatesFromOUTTRANS();
    arrItemCode = dbHelper.getAllItemCodesFromOUTTRANS();

    protected String doInBackground(String... args) {

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();

        for(int i = 0; i <= arrDocumentNumber.length; i++){

            params.add(new BasicNameValuePair(TAG_DOCUMENTNUMBER, arrDocumentNumber[i] ));
            params.add(new BasicNameValuePair(TAG_TRANSACTIONDATE, arrTransactionDate[i] ));
            params.add(new BasicNameValuePair(TAG_ITEMCODE, arrItemCode[i] )); 

        }

        // getting JSON Object
        // Note that insert outtrans url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_insertTo_outtrans,
                "POST", params);

 }

PHP:

 <?php
// array for JSON response
$response = array();

// check for required fields
if ( isset($_POST['documentnumber']) && isset($_POST['transactiondate']) && isset($_POST['itemcode']) ){

    $documentnumber = $_POST['documentnumber'];
    $transactiondate = $_POST['transactiondate'];
    $itemcode = $_POST['itemcode'];

    // include db connect class
    include('dbconnect.php');

    $result = $conn->prepare("INSERT INTO outtrans(documentnumber, transactiondate, itemcode) VALUES (:documentnumber, :transactiondate, :itemcode)");

    $result->bindParam(':documentnumber', $documentnumber);
    $result->bindParam(':transactiondate', $transactiondate);
    $result->bindParam(':itemcode', $itemcode);
    $result->execute();


    // check if row inserted or not
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "New record successfully created.";

        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        echo json_encode($response);
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}
?>

我在这一行遇到错误:

   params.add(new BasicNameValuePair(TAG_DOCUMENTNUMBER, arrDocumentNumber[i] ));

有什么想法吗?我真的被这个问题困住了。非常感谢您的帮助。谢谢。

更新: 我改成

   for(int i = 0; i < arrDocumentNumber.length; i++){

它可以工作,但最后一条记录只保存到远程 mysql 数据库中。它应该保存我从本地 sqlite 数据库中获得的两条记录。

【问题讨论】:

  • for(int i = 0; i

标签: java php android mysql sqlite


【解决方案1】:

只需将条件&lt;= 更改为&lt;

Bcs,例如,如果您的 array 包含三个元素,则 arraylength 将为 3。因此,for loop 应该只循环 3 次。但是,您已将 i 初始化为 0,并将条件设置为 i &lt;= arrDocumentNumber.length,因此 for will 循环总共四次,直到 i 的值从 0 变为 3。所以,它正在抛出 ArrayindexOutofBoundexception

条件应该是:

for(int i = 0; i < arrDocumentNumber.length; i++)

for(int i = 1; i <= arrDocumentNumber.length; i++)

示例代码:

for(int i = 0; i < arrDocumentNumber.length; i++){

params.add(new BasicNameValuePair(TAG_DOCUMENTNUMBER, arrDocumentNumber[i] ));
params.add(new BasicNameValuePair(TAG_TRANSACTIONDATE, arrTransactionDate[i] ));
params.add(new BasicNameValuePair(TAG_ITEMCODE, arrItemCode[i] )); 

}

【讨论】:

  • 感谢这项工作,但它只保存一条记录。我不知道为什么。
  • 是的,我现在明白了,但我想知道为什么它只将我本地数据库中的最后一条记录保存到远程 mysql 数据库中。
【解决方案2】:

数组索引应该小于数组长度。变化自

 for(int i = 0; i <= arrDocumentNumber.length; i++){

到,

 for(int i = 0; i < arrDocumentNumber.length; i++){

【讨论】:

  • 感谢这项工作,但它只保存一条记录。我不知道为什么
  • arrDocumentNumber 中有多少条记录?
  • DocumentNumber中有2条记录
  • 可能你的 PHP 代码跳过了一条记录。我对 PHP 了解不多。
【解决方案3】:

你需要改变你的for条件:

for(int i = 0; i <= arrDocumentNumber.length; i++){

for(int i = 0; **i < arrDocumentNumber.length;** i++){

小于不等于小于

这引发了异常

【讨论】:

  • 感谢这项工作,但它只保存一条记录。我不知道为什么
  • 您能否检查一下参数列表实际持有的值?它是只包含一个值还是根据需要包含多个值?如果它包含所需的值,请检查对实际在数据库中插入值的函数的调用。
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多