我有一个数据库在MySQL上的树莓派服务器上,我存储有关具有多个属性的机器的数据。我想连接到这个数据库并执行CRUD(创建,读取,更新,删除)操作。
我使用这些java文件连接到一个PHP文件,该文件又返回一个JSON对象。使用Json保持连接对mysql服务器开放
public class JSONParser {
String charset = "UTF-8";
HttpURLConnection conn;
DataOutputStream wr;
StringBuilder result;
URL urlObj;
JSONObject jObj = null;
StringBuilder sbParams;
String paramsString;
public JSONObject makeHttpRequest(String url, String method,
HashMap<String, String> params) {
sbParams = new StringBuilder();
int i = 0;
for (String key : params.keySet()) {
try {
if (i != 0){
sbParams.append("&");
}
sbParams.append(key).append("=")
.append(URLEncoder.encode(params.get(key), charset));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
i++;
}
if (method.equals("POST")) {
// request method is POST
try {
urlObj = new URL(url);
conn = (HttpURLConnection) urlObj.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept-Charset", charset);
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.connect();
paramsString = sbParams.toString();
wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(paramsString);
wr.flush();
wr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
else if(method.equals("GET")){
// request method is GET
if (sbParams.length() != 0) {
url += "?" + sbParams.toString();
}
try {
urlObj = new URL(url);
conn = (HttpURLConnection) urlObj.openConnection();
conn.setDoOutput(false);
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept-Charset", charset);
conn.setConnectTimeout(15000);
conn.connect();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
//Receive the response from the server
InputStream in = new BufferedInputStream(conn.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
Log.d("JSON Parser", "result: " + result.toString());
} catch (IOException e) {
e.printStackTrace();
}
conn.disconnect();
// try parse the string to a JSON object
try {
jObj = new JSONObject(result.toString());
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON Object
return jObj;
}
}
,然后主类,我把这个JSON解析器
public class MainActivity extends FragmentActivity{
private static String url_import = "http://192.168.8.100/import.php";
private ProgressDialog progressDialog;
JSONParser Jsonparser = new JSONParser();
String text;
boolean Ohoh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText editText = (EditText) findViewById(R.id.editText);
text = editText.getText().toString();
new CreateNewProduct().execute();
}
});
}
class CreateNewProduct extends AsyncTask <String, String, String> {
//Show progress dialog
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("WAIT...");
progressDialog.setIndeterminate(false);
progressDialog.setCancelable(false);
progressDialog.show();
}
protected String doInBackground(String... args){
HashMap<String, String> params = new HashMap<>();
params.put("Name", text);
params.put("Company", "EDP");
params.put("Phone Number", "+00856554");
Log.d("request", "starting");
//JSON
JSONObject json =Jsonparser.makeHttpRequest(url_import, "POST", params);
if(json != null){Ohoh = true;} else{Ohoh = false;}
return null;
}
protected void onPostExecute(String url_link){
if(Ohoh) {
TextView itworkd = (TextView) findViewById(R.id.textView);
itworkd.setText("it workd");
}
progressDialog.dismiss();
}
}
}
我的PHP文件是非常基本的,我只是打开连接并发送基本查询。
如何保持这种连接打开,这样我就不用再连接到数据库(需要较长的时间不利于用户)时,我想要做的另一个查询(即使是在其他活动)?
摆脱PHP垃圾和使用servlet与连接池。 – EJP