Aplikasi Java Query Box
Selama mengembangkan aplikasi, untuk mencoba perintah SQL yang akan digunakan sudah benar atau belum, diperlukan suatu cara yang mudah dan cepat.
Apalagi jika aplikasi pengirim perintah berupa aplikasi dekstop yang dibuat dengan Java, maka akan sedikit ribet, sebab perlu berhati-hati terutama terkait desain keamanan.
Latar Belakang
Sebelumnya, penulis telah membuat aplikasi Java yang penulis tujukan untuk mencoba kemampuan halaman PHP untuk menerima data yang dikirim melalui metode POST, dan menampilkan hasilnya.
Aplikasi tersebut penulis namakan TestPage, dengan output berupa data JSON.
Sayangnya, aplikasi itu lebih cocok untuk mengecek perintah SQL seperti SELECT, dan kurang cocok digunakan untuk mengecheck perintah seperti INSERT dan UPDATE, yang lebih membutuhkan modifikasi perintah yang akan dikirimkan.
Kode Program
Aplikasi menggunakan empat class Java dan satu halaman PHP.
Penulis menggunakan database MySQL, yang bertempat di hosting berbayar yang penulis sewa.
File query_box.php digunakan untuk mengeksekusi perintah SQL yang dikirimkan.
<?php define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'username'); define('DB_PASSWORD', 'password'); define('DB_DATABASE', 'dbname'); define('KEY_APP', 'terserahAnda!'); session_start(); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $dbconnection = new mysqli(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); if ($dbconnection->connect_error){ header("Location:nopage.php"); } include "function.php"; if(isset($_POST["username"]) && isset($_POST["passkey"]) && isset($_POST["key_app"]) && $_POST["key_app"]==KEY_APP){ $hasil=getLoginState($dbconnection,$_POST["username"],$_POST["passkey"]); if(!empty($hasil["error"])){ throwJSON($dbconnection,$hasil); } if(intval($hasil["user_level"])>=10){ $hasil["error"]="Authentication failed!"; throwJSON($dbconnection,$hasil); } if(isset($_POST["query"]) && !empty($_POST["query"])){ $sql = $_POST["query"]; $result = $dbconnection->query($sql); if($result){ $hasil["result"]="OK\n"; if(isset($_POST["list"]) && $_POST["list"]=="true"){ if($result->num_rows>0){ while($row=$result->fetch_assoc()){ $hasil["result"].=implode(",",$row)."\n"; } } } }else $hasil["error"]="Error ".$dbconnection->error; } echo json_encode($hasil); }else{ if($_POST["key_app"]!=KEY_APP)$hasil["error"]="Unrecognized device!"; else $hasil["error"]="No result"; echo json_encode($hasil); } $dbconnection->close(); ?>
Sedangkan file QueryBox.java, adalah file utama untuk membangun Frame dan interface pengirim perintah SQL.
<?php define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'username'); define('DB_PASSWORD', 'password'); define('DB_DATABASE', 'dbname'); define('KEY_APP', 'terserahAnda!'); session_start(); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $dbconnection = new mysqli(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); if ($dbconnection->connect_error){ header("Location:nopage.php"); } include "function.php"; if(isset($_POST["username"]) && isset($_POST["passkey"]) && isset($_POST["key_app"]) && $_POST["key_app"]==KEY_APP){ $hasil=getLoginState($dbconnection,$_POST["username"],$_POST["passkey"]); if(!empty($hasil["error"])){ throwJSON($dbconnection,$hasil); } if(intval($hasil["user_level"])>=10){ $hasil["error"]="Authentication failed!"; throwJSON($dbconnection,$hasil); } if(isset($_POST["query"]) && !empty($_POST["query"])){ $sql = $_POST["query"]; $result = $dbconnection->query($sql); if($result){ $hasil["result"]="OK\n"; if(isset($_POST["list"]) && $_POST["list"]=="true"){ if($result->num_rows>0){ while($row=$result->fetch_assoc()){ $hasil["result"].=implode(",",$row)."\n"; } } } }else $hasil["error"]="Error ".$dbconnection->error; } echo json_encode($hasil); }else{ if($_POST["key_app"]!=KEY_APP)$hasil["error"]="Unrecognized device!"; else $hasil["error"]="No result"; echo json_encode($hasil); } $dbconnection->close(); ?>
Class JSONCaller.java adalah class Java yang digunakan untuk menjalankan method HttpsURLConnection, yang digunakan oleh QueryBox.java.
package example; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLEncoder; import java.util.Map; import javax.net.ssl.HttpsURLConnection; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JSONCaller implements Runnable { private String ErrorMessage=""; private Map<String,String> data; private String urltarget=""; public JSONObject result=null; public JSONCaller() { } public JSONCaller(String url,Map<String, String> data) { this.urltarget = url; this.data = data; } public Map<String, String> getData() { return data; } public void setData(Map<String, String> data) { this.data = data; } public String getUrl() { return urltarget; } public void setUrltarget(String url) { this.urltarget = url; } public JSONObject getResult() { return result; } public String getErrorMessage() { return ErrorMessage; } public void onFinished() { } public void run() { StringBuilder sbParams = new StringBuilder(); int i = 0; for (String key : data.keySet()) { try { if (i != 0){ sbParams.append("&"); } sbParams.append(key).append("=").append(URLEncoder.encode(data.get(key), "UTF-8")); } catch (UnsupportedEncodingException e) { ErrorMessage=e.toString(); } i++; } String paramsString = sbParams.toString(); sendData(0,paramsString); } private void sendData(int mode,String paramsString) { HttpsURLConnection connection=null; try{ URL url = new URL(urltarget); connection = (HttpsURLConnection)url.openConnection(); connection.setReadTimeout(15000); connection.setConnectTimeout(15000); connection.setDoInput(true); connection.setDoOutput(true); DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); wr.writeBytes(paramsString); wr.flush(); wr.close(); connection.connect(); int responseCode=connection.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { InputStream in = new BufferedInputStream(connection.getInputStream()); InputStreamReader inreader=new InputStreamReader(in); if(mode==0){ try{ JSONParser jsonParser = new JSONParser(); result = (JSONObject) jsonParser.parse(inreader); } catch (ParseException e) { ErrorMessage="Error code "+responseCode; sendData(1,paramsString); } }else{ BufferedReader reader = new BufferedReader(inreader); StringBuilder restring = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { restring.append(line); } String a=restring.toString(); if(!a.isEmpty()){ HTMLViewer v=new HTMLViewer(); v.setup("View Error",a); } return; } }else{ ErrorMessage="Error code "+responseCode; } } catch (IOException e) { ErrorMessage=e.toString(); } finally { if (connection != null) { connection.disconnect(); } } onFinished(); } }
Selain itu, class HTMLViewer hanya digunakan untuk menampilkan pesan error JSONCaller. Jika perintah tidak dapat dijalankan.
package example; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.JEditorPane; import javax.swing.JPanel; import javax.swing.JScrollPane; /** * * @author Edugame */ public class HTMLViewer extends MainFrame { public void setup(String title,String content) { setTitle(title); setLayout(new GridLayout()); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.LEFT)); JEditorPane edhtml=new JEditorPane("text/html",content); JScrollPane spane = new JScrollPane(edhtml, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ); add(spane); setSize(512,512); setSubframe(true); setVisible(true); } }
Kemudian untuk class LoopProgressBar dan ProgressCircleUI dapat di download pada posting yang berjudul "Menampilkan Undetermined Circle Progressbar di Java".
Komentar
Posting Komentar