我在向mysql表中插入行时出错。
这些记录来自我的本地sqlitedb。我目前有两条记录,希望将它们插入到mysqldb中。
以下是我正在处理的代码:
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++){
它是有效的,但最后一条记录只保存到远程mysqldb中。它应该保存我从本地sqlite数据库中获得的两条记录。
只需将条件<=
更改为<
。
Bcs,例如,如果您的array
包含三个元素,则array
的length
将为3。因此,for loop
应该只循环三次。但是,您已经将i
初始化为0,并将条件设置为i <= 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] ));
}
数组索引应小于数组长度。的变化
for(int i = 0; i <= arrDocumentNumber.length; i++){
收件人,
for(int i = 0; i < arrDocumentNumber.length; i++){
您需要更改for条件:
for(int i = 0; i <= arrDocumentNumber.length; i++){
至
for(int i = 0; **i < arrDocumentNumber.length;** i++){
小于,也不等于和低于。
这会引发异常。