1. Setup 1. Mit dieser Anleitung (http://www.unimarburg.de/fb12/sys/services/svc_more_html#svc_sql) eine Datenbank einrichten. 2. Installieren des MySQL Workbench (Version 5.2.43) 3. Unter Database > Manage Connection folgende Werte eintragen login.mathematik.uni-marburg.de Dein Username ab FB12 (Unix) mysql.mathematik.uni-marburg.de Dein Username ab FB12 (Unix) 4. Zweimal das UNIX-Passwort eingeben 5. Eigen Datenbank (Username) suchen und durch Doppelklick auswählen
6. Eine Tabelle anlegen: CREATE TABLE customer (First_Name char(50), Last_Name char(50), Address char(50), City char(50), Country char(25), Birth_Date date) 7. Einen Datensatz anlagen: INSERT INTO customer (First_Name,Last_Name,Address,City,Country,Birth_Date) VALUES ('John','Doe','Hans-Meerwein Strasse','Marburg','Germany','1970-01-10'); 8. Resultat kontrollieren SELECT * FROM customer; 2. Android Client 1. In der AndroidManifest.xml den Folgenden Eintrag hinzufügen: <uses-permission android:name="android.permission.internet"></usespermission> 2. Im Java Build-Path müssen die Bibliotheken a. Jsch-0.1.49.jar (SSH) http://stackoverflow.com/questions/1968293/connect-toremote-mysql-database-through-ssh-using-java b. Mysql-connector-java-3.0.17-ga-bin.jar (JBCD) eingebunden und exportiert werden.
3. Folgendes Layout anlegen <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".mainactivity" > <EditText android:id="@+id/edittext1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button1" android:layout_alignparentleft="true" android:layout_alignparentright="true" android:layout_alignparenttop="true" android:ems="10" android:inputtype="textmultiline" > <requestfocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_alignparentright="true" android:text="verbindungstest..." /> </RelativeLayout> 4. Folgende Activity Klasse package com.example.datenbankzugriff; import com.example.datenbankzugriff.r; import android.os.bundle; import android.app.activity; import android.view.menu; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; public class MainActivity extends Activity { TextView edittext = null; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); final Button button = (Button) findviewbyid(r.id.button1); edittext = (EditText) findviewbyid(r.id.edittext1); button.setonclicklistener(new View.OnClickListener() { public void onclick(view v) { connect(); );
public void connect(){ ConnectionTask connectiontask = new ConnectionTask(); connectiontask.execute(); try { edittext.settext(connectiontask.get()); catch (Exception e) { edittext.settext((charsequence) e); @Override public boolean oncreateoptionsmenu(menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.activity_main, menu); return true; 5. Die Connection Task Klasse package com.example.datenbankzugriff; import java.sql.connection; import java.sql.drivermanager; import java.sql.resultset; import java.sql.statement; import java.util.hashtable; import android.os.asynctask; import com.jcraft.jsch.jsch; import com.jcraft.jsch.session; class ConnectionTask extends AsyncTask<Void, Integer, String> { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.driver"; //external database connection static final String DB_URL = "jdbc:mysql://localhost:3399/svaupel"; static final String USER = "svaupel"; static final String PASS = ""; //ssh connection static final String ssh_user = "svaupel"; static final String ssh_server = "137.248.122.61"; // login.mathematik.uni-marburg.de static final String ssh_pass = PASS; static final int ssh_port = 22; static final String rhost = "137.248.123.188"; // mysql.mathematik.uni-marburg.de static final int rport = 3306; static final int lport = 3399; protected String doinbackground(void... params) {
Session session = null; Connection conn = null; Statement stmt = null; String log = ""; try { // SSH Connection log = log + "\n"+"connecting to ssh-login..."; final JSch jsch = new JSch(); session = jsch.getsession(ssh_user, ssh_server, ssh_port); log = log + "\n"+"got session..."; final Hashtable<String, String> config = new Hashtable<String, String>(); config.put("stricthostkeychecking", "no"); session.setconfig(config); log = log + "\n"+"session setted..."; log = log + "\n"+"session set ssh-password..."; session.setpassword(ssh_pass); session.connect(); log = log + "\n"+"session connected..."; rport); int assigned_port = session.setportforwardingl(lport, rhost, log = log + "\n"+"port forwarding was successful..."; // MySQL Connection Class.forName(JDBC_DRIVER); log = log + "\n"+"connecting to a selected database..."; conn = DriverManager.getConnection(DB_URL, USER, PASS); log = log + "\n"+"connected database successfully..."; log = log + "\n"+"creating statement..."; stmt = conn.createstatement(); log = log + "\n"+"created statement successfully...\n"; log = log + "\n"+"---------------------------------\n"; String sql; sql = "SELECT * FROM customer"; //sql = "INSERT INTO customer (First_Name,Last_Name,Address,City,Country,Birth_Date) VALUES ('John','Doe','Hans-Meerwein Strasse','Marburg','Germany','1970-01-10');"; stmt = conn.createstatement(); ResultSet resultset = stmt.executequery(sql); while (resultset.next()){ log = log + resultset.getstring("first_name") +", "+ resultset.getstring("last_name") +"\n"; catch (Exception e) { log = log +"/n"+e;
return log; 6. Ergebnis