我想把安卓系统的数据插入MySQL数据库。插入记录后,我想获得最后一个插入id并检索lastID值。有可能吗?我怎样才能做到这一点?如有任何帮助,我们将不胜感激。
addInformation(status, timeIn);
lastID =? // what should I write in order to get the last ID ?
public void addInformation(final String name, final String weather, final String date2, final String status, final String timeIn, final String timeOut) {
class AddInfo extends AsyncTask<String, Void, String> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(WorkDetailsTable.this, "Please Wait", null, true, true);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(getApplicationContext(),s, Toast.LENGTH_LONG).show();
//addWorkForce(Sub, NoP, NoH, Long.parseLong(s));
// addWorkDetails(results, Long.parseLong(s));
}
@Override
protected String doInBackground(String... params) {
HashMap<String, String> data = new HashMap<String, String>();
data.put(Config.KEY_USER_NAME, name);
data.put(Config.KEY_WEATHER, weather);
data.put(Config.KEY_DATE, date2);
data.put(Config.KEY_STATUS, status);
data.put(Config.KEY_TIMEIN, timeIn);
data.put(Config.KEY_TIMEOUT, timeOut);
RequestHandler rh = new RequestHandler();
String result = rh.sendPostRequest(Config.ADD_INFORMATION, data);
return result;
}
}
AddInfo ru = new AddInfo();
ru.execute(name, weather, date2, status, timeIn, timeOut);
}
ADD_INFORMATION.php
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
//Getting values
$status = $_POST['status'];
$timeIn = $_POST['timeIn'];
//Creating an sql query
$sql = "INSERT INTO information(status, time_in) VALUES ('$status', '$timeIn')";
//Importing our db connection script
require_once('dbConnect.php');
//Executing query to database
if(mysqli_query($con,$sql)){
echo 'Information Added Successfully';
$insertId=mysql_insert_id();
echo json_encode($insertId);
}else{
echo 'Could Not Add Information';
}
//Closing the database
mysqli_close($con);
}
?>
我想获得$insertId并放入lastID
根据注释,我正在创建新的答案,因为我的两个答案基本上都是正确的。我做了一个例子,使用android(apachecommons 4.5.1)和php5.6。这两个版本(4.5.1和5.6)都不是要求,只是我现在使用的版本。
示例假设您有一个名为information的mysql表,其中包含字段status、time_in,另一个字段标记为AUTO_INCREMENT。
Java部件
在原始::doInBackground(字符串…params)函数中,您可以使用
HttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://localhost/so/sendrequest/addInformation.php");
try{
List<NameValuePair> data = new ArrayList<NameValuePair>(2);
data.add(new BasicNameValuePair("status", "ok"));
data.add(new BasicNameValuePair("timein", "12:55"));
httpPost.setEntity(new UrlEncodedFormEntity(data));
String response = EntityUtils.toString(client.execute(httpPost).getEntity());
System.out.println(response); //here you have your insertid
}catch(ClientProtocolException e){
// TODO Auto-generated catch block
}catch(IOException e){
// TODO Auto-generated catch block
}
基于本地Java
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
和apachecommons,应该包含在android库中(如果没有,请下载链接)
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
PHP部分
addInformation.php
<?php
class AddInformation
{
function response(){
/** @var mysqli $con */
require_once('dbConnect.php'); //$con = new mysqli('127.0.0.1', 'root', '', 'so');
$status = $con->real_escape_string($_POST['status']);
$timein = $con->real_escape_string($_POST['timein']);
$con->query("INSERT INTO information (status, time_in) VALUES ('$status', '$timein')");
echo $con->insert_id;
}
}
$ai = new AddInformation();
$ai->response();
作为第一行,
echo 'Information Added Successfully';
会破坏你的json格式,我建议你像一样格式化所需的json
{"status": "ok", "message": "Information Added Successfully", "data": {"lastid": 1234}}
之后,阅读如何使用
String result = rh.sendPostRequest(Config.ADD_INFORMATION, data);
关于如何在Java中将String转换为JSONObject。最令人满意的方法是为json响应准备java类,例如
class AddInformationResponse
{
public String status;
public String messsage;
public ObjectNode data;
}
您可以在众多教程中的一篇中阅读如何将json映射到java对象。
在ADD_INFORMATION脚本中,您所需要做的就是在insert语句之后获取数据。因此,我会使用类似于以下的东西:
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
//Getting values
$status = $_POST['status'];
$timeIn = $_POST['timeIn'];
//Creating an sql query
$sql = "INSERT INTO information(status, time_in) VALUES ('$status', '$timeIn')";
//Importing our db connection script
require_once('dbConnect.php');
//Executing query to database
if(mysqli_query($con,$sql)){
$sql = "SELECT * FROM INFORMATION ORDER BY time_in DESC LIMIT 1";
echo $sql;
$insertId=mysql_insert_id();
echo json_encode($insertId);
}else{
echo 'Could Not Add Information';
}
//Closing the database
mysqli_close($con);
}
?>
实际上,我所做的是对刚刚插入INSERT语句中的数据创建一个SELECT语句。
希望这能有所帮助。