大家好我在android中做客户端/服务器应用程序。我想要做的是从客户端发送数据,然后服务器检索并再次发送给客户端..
例如,我要将商品代码发送到我的服务器,我想查询这样的内容:
SELECT itemname FROM items WHERE itemcode = :itemcode
$itemname = $result['itemname'];
其中:itemcode是我的客户传递的数据。接下来,在传递itemcode之后,我想使用itemname包含在我的下一个查询中以检索所有其他记录。
SELECT itemsize, itemmeasure FROM itemsdetail WHERE itemname = :itemname
所以它显示所有记录。
到目前为止我尝试过,我创建了另一个表来查询最后插入的数据。但我认为这不高效。我只想把查询放在一个php文件中。
<?php
include('dbconnect.php');
$sql = "SELECT itemname FROM items ORDER BY _id DESC LIMIT 1";
$stmt = $conn->prepare($sql);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$itemname = $result['itemname'];
$sql = "SELECT itemsize, itemmeasure
FROM itemsdetail
AND itemname = :itemname";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':itemname' => $itemname));
$set = array();
while($r = $stmt->fetchAll(PDO::FETCH_ASSOC)){
$set = $r;
}
header('Content-type: application/json');
echo json_encode($set);
?>
爪哇:
@Override
protected Void doInBackground(Void... params) {
// Create the array
arraylist = new ArrayList<HashMap<String, String>>();
// Retrieve JSON Objects from the given website URL in JSONfunctions.class
String result = JSONFunctions.getJSONfromURL(URL);
try {
JSONArray jr = new JSONArray(result);
for(int i=0;i<jr.length();i++)
{
HashMap<String, String> map = new HashMap<String, String>();
jb = (JSONObject)jr.get(i);
map.put(TAG_ITEMSIZE, jb.getString(TAG_ITEMSIZE));
map.put(TAG_ITEMMEASURE, jb.getString(TAG_ITEMMEASURE));
arraylist.add(map);
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
到目前为止,如果我将两个查询放在一个PHP文件中,我会收到错误,我不知道出了什么问题。所以我的替代解决方案是创建另一个php文件来接收来自我的客户端的传递数据。但我知道这不是一个好的解决方案。我需要能够将其放在一个php文件中以传递我的数据并使用我在第二个查询中传递的数据。你有什么想法怎么做?对你的帮助表示感谢。谢谢。
答案 0 :(得分:1)
在Google Plus上聊天后,根本原因是由于您使用JSONParser的教程。 JSONParser似乎是第三方API,令人讨厌......
您从服务器返回一个数组而不是导致问题的对象。以下是Google Plus上共享的实施代码
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);
try {
// Building Parameters
List<NameValuePair> params1 = new ArrayList<NameValuePair>();
params1.add(new BasicNameValuePair(TAG_VANCODE, "VAN-ABC"));
// Set HTTPPOST with your parameters
httppost.setEntity(new UrlEncodedFormEntity(params1));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
// Setup an InputStream to handle the response.
InputStream ips = response.getEntity().getContent();
BufferedReader buf = new BufferedReader(new InputStreamReader(ips,"iso-8859-1"), 8);
// Use a reader to read the data and store it in a String builder
StringBuilder sb = new StringBuilder();
String s;
while(true) {
s = buf.readLine();
if(s==null || s.length()==0)
break;
sb.append(s);
}
buf.close();
ips.close();
System.out.println("I AM HERE TESTING OUTPUT - " + sb.toString());
// Take the JSON and create an array
// sb.string should look like this
JSONArray jr = new JSONArray(sb.toString());
for(int i = 0; i<jr.length(); i++) {
JSONObject jo = jr.getJSONObject(i);
System.out.println("Document Number " + jo.getString("doccumentnumber"));
System.out.println("Item Code: " + jo.getString("itemcode"));
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:0)
尝试
SELECT itemsize, itemmeasure FROM itemdetails INNER JOIN items ON itemdetails.itemname = items.itemname WHERE items.itemcode = #itemcode
我在MySQL方面不是很好,可能你需要设置一些别名,但如果想要只做一个查询,这应该有效。