0
我有一個方法將值插入到外部數據庫。我有一組團隊成員名稱,這些成員名稱隨着團隊成員團隊ID(這是team_members表中的外鍵)逐個循環發送到數據庫。插入腳本返回成功,但沒有插入數據庫
下面是我簡單的數據庫設計:
CREATE TABLE team (
team_id int(11) NOT NULL AUTO_INCREMENT,
unique_id varchar(23) NOT NULL,
teamName varchar(50) NOT NULL,
PRIMARY KEY (team_id)
);
CREATE TABLE team_member (
team_member_id int(11) NOT NULL AUTO_INCREMENT,
unique_id varchar(23) NOT NULL,
fullName varchar(50) NOT NULL,
team_id int (11) NOT NULL,
PRIMARY KEY (team_member_id),
FOREIGN KEY (`team_id`)
REFERENCES `scratchcard`.`team` (`team_id`)
);
以下是我的方法,我用它來實現這一目標:
private void addTeamMember(final List teamMemberArray,final String team_id) {
//helps with debugging regarding post requests
Gson gson = new GsonBuilder()
.setLenient()
.create();
//Retrofit is a REST Client for Android and Java by Square.
//It makes it relatively easy to retrieve and upload JSON (or other structured data) via a REST based webservice
Retrofit retrofit = new Retrofit.Builder()
//directing to the localhost which is defined in the Constants Class as BASE_URL
.baseUrl(Constants.BASE_URL)
//Add converter factory for serialization and deserialization of objects.
//Gson passed as a parameter to help with debug
.addConverterFactory(GsonConverterFactory.create(gson))
//Create the Retrofit instance using the configured values.
.build();
//The Retrofit class generates an implementation of the RequestInterface interface.
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
for (Object x : teamMemberArray) {
//create new Team object
TeamMember teamMember = new TeamMember();
//setter
teamMember.setFullName(String.valueOf(x));
teamMember.setTeam_id(team_id);
Toast.makeText(getActivity(), teamMember.getFullName(),
Toast.LENGTH_LONG).show();
//create new server object
final ServerRequest request = new ServerRequest();
//make a request to set the operation to Team_Member
request.setOperation(Constants.Team_Member);
//set values entered for the new teamMember to be sent to the server
request.setTeamMember(teamMember);
Call<ServerResponse> response = requestInterface.operation(request);
/**
* Enqueue is used to Asynchronously send the request and notify callback of its response or if an error occurred
* talking to the server, creating the request, or processing the response.
*/
response.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
/*Snackbars provide lightweight feedback about an operation. They show a brief message at the
bottom of the screen on mobile and lower left on larger devices. Snackbars appear above all other
elements on screen and only one can be displayed at a time.
*/
Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();
if (resp.getResult().equals(Constants.SUCCESS)) {
SharedPreferences.Editor editor = pref.edit();
Log.d("TEST VALUE", "getTeamMemberName() = " + response.body().getTeamMember().getFullName());
Log.d("TEST VALUE", "getTeamMemberUniqueID() = " + response.body().getTeamMember().getUnique_id());
Log.d("TEST VALUE", "getTeamMemberTeamID() = " + response.body().getTeamMember().getTeamID());
editor.putString(Constants.FULL_NAME, resp.getTeamMember().getFullName());
editor.putString(Constants.UNIQUE_ID, resp.getTeamMember().getUnique_id());
editor.putString(Constants.TEAM_ID, resp.getTeamMember().getTeamID());
editor.apply();
goToQuestions();
}
progress.setVisibility(View.INVISIBLE);
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
progress.setVisibility(View.INVISIBLE);
Log.d(Constants.TAG, "failed" + t);
Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();
}
});
}
}
因爲我在同一時間將這些值之一,我有以下簡單的插入腳本(使用PDO)
public function insertTeamMember($fullName, $team_id){
$unique_id = uniqid('', true);
$sql = 'INSERT INTO team_member SET unique_id =:unique_id,fullName =:fullName, team_id =:team_id';
$query = $this ->conn ->prepare($sql);
$query->execute(array('unique_id' => $unique_id, ':fullName' => $fullName, ':team_id' => $team_id));
$data = $query -> fetchObject();
if ($query) {
$teamMember["fullName"] = $fullName;
$teamMember["unique_id"] = $unique_id;
$teamMember["team_id"] = $team_id;
return $teamMember;
} else {
return false;
}
}
我的日誌輸出使用response.body確認毫秒的價值觀到我的插入腳本罰款。
08-11 11:07:49.750 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberName() = 1
08-11 11:07:49.750 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberUniqueID() = 598d90061b7de5.56364485
08-11 11:07:49.750 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberTeamID() = 598d8ffd0b9969.94188022
08-11 11:07:49.754 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberName() = 2
08-11 11:07:49.754 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberUniqueID() = 598d90061d4347.93277262
08-11 11:07:49.754 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberTeamID() = 598d8ffd0b9969.94188022
08-11 11:07:49.759 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberName() = 3
08-11 11:07:49.759 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberUniqueID() = 598d90061d8bb2.78397401
08-11 11:07:49.759 3884-3884/com.test.practise D/TEST VALUE: getTeamMemberTeamID() = 598d8ffd0b9969.94188022
我的回調確認數據(我用MYSQL)作爲通過我的日誌輸出顯示,但該數據沒有實際插入到我的數據庫的成功插入。
我相信我的插入腳本肯定有問題,但我不確定解決方案是什麼。我試圖用郵遞員來幫助我,但是這又不是指向我爲什麼被告知成功,但實際上並沒有讓我的數據插入的方向。
感謝您的回答,但我在郵差 - 未定義的屬性中出現以下錯誤:PDostatement :: $ insert_id –
噢好的。你可以申請$ insert_id = $ this - > conn-> lastInsertId();而不是$ insert_id = $ query-> insert_id; –
我現在得到未定義的屬性:PDOStatement :: $ num_rows –