【发布时间】:2015-04-11 09:30:44
【问题描述】:
你怎么样
我需要访问数据库并从表中读取数据然后获取它的值,因此我创建了一个 php 文件以 JSON 格式打印数据库以访问数据:
<?php
try{
$db=new PDO('mysql:host=localhost;dbname='database','table','password');
$row=$db->prepare('select * from users' );
$row->execute();
$json_data=array();
foreach($row as $rec)
{
$json_array['userId']=$rec['userId'];
$json_array['user']=$rec['user'];
$json_array['pass']=$rec['pass'];
$json_array['name']=$rec['name'];
$json_array['family']=$rec['family'];
$json_array['gender']=$rec['gender'];
$json_array['birthday']=$rec['birthday'];
array_push($json_data,$json_array);
}
echo json_encode($json_data);
} catch(PDOExcetion $e)
{
print "Error: " . $e->getMessage()."<br/>";
die();
}
?>
这是输出:
[
{"userId":"1","user":"saly","pass":"666","name":"SalyR","family":"manson","gender":"male","birthday":"1988\/11\/10"},
{"userId":"1","user":"foo","pass":"2657","name":"foo","family":"rocki","gender":"male","birthday":"13989\/2\/07"},
{"userId":"1","user":"mil","pass":"63495","name":"milo","family":"toufa","gender":"male","birthday":"13987\/04\/21"},
{"userId":"1","user":"soos","pass":"03468","name":"soro","family":"radi","gender":"female","birthday":"13990\/08\/09"}
]
我想访问指定的值,例如“userId”、“name”和“birthday”。
我使用三种方法获取值:
1) getJSONFromDatabase 方法获取数据库 URL 并返回 JSON 字符串。
public String getJSONFromDatabase(String getDatabaseURL) {
HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost(getDatabaseURL);
String result = "";
try {
HttpResponse response = client.execute(method);
int code = response.getStatusLine().getStatusCode();
InputStream stream = response.getEntity().getContent();
result = inputstreamToString(stream);
Log.i("LOG", "Code :" + code);
} catch (IOException e) {
Log.e("Database", "Error Connect to Database!");
e.printStackTrace();
}
return result;
}
2) inputstreamToString 方法获取一个 Inputstream 并读取所有行。
private String inputstreamToString(InputStream getStream) {
BufferedReader reader = new BufferedReader(new InputStreamReader(getStream));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
return builder.toString();
} catch (IOException e) {
Log.e("Reader", "Error reading stream!");
e.printStackTrace();
}
return "";
}
3) jsonToString 方法获取带有我们想要获取的 String 值的 JSON String。
public String jsonToString(String getJSONString, String value) {
String userId = "";
try {
JSONObject object = new JSONObject(getJSONString);
userId = object.getString(value);
return userId;
} catch (JSONException e) {
Log.e("JSON", "Error converting!");
e.printStackTrace();
}
return "";
}
所以我这样称呼方法:
String databaseURL = "http://192.168.56.1/saly/getDatabaseTable.php";
String jsonFormat = getJSONFromDatabase(databaseURL);
String userId = jsonToString(jsonFormat, "userId");
String name= jsonToString(jsonFormat, "name");
String birthday= jsonToString(jsonFormat, "birthday");
最后我在日志中得到了这个错误:
JSON: Error converting!
JSON: Error converting!
JSON: Error converting!
当我删除 [ ] 并像这个 JSON 字符串一样写一行时,它可以正常工作,只有一行!:
{
"userId":"1",
"user":"saly",
"pass":"666",
"name":"SalyR",
"family":"manson",
"gender":"male",
"birthday":"1988\/11\/10"
}
但这对我不起作用,因为当我以 JSON 格式打印所有数据库表时,整个数据都会打印出来。
我写的太多了,很抱歉,我试着解释每一件事。 请各位大神帮我看看哪里错了?
谢谢。
【问题讨论】:
-
您是否使用循环打印结果?
-
使用 Gson 比编写所有这些代码要容易得多
-
如果您从服务器获取 json 数组,那么您应该将其解析为 json 数组而不是 json 对象。
标签: java php android mysql json