Hallo Leute,
ich sehe wohl mal wieder den Wald vor lauter Bäumen nicht mehr. Ich habe einen einfachen Client und einen einfachen Server geschrieben. Der Client sendet einen
SQL Befehl als String an einen Server, der das Ganze weiterleitet an eine SQLITE-Datenbank und das Resultset dann mittels einer ArrayList an den Client zurückschickt. Das Zurüsckschicken funktioniert, die Daten werden angezeigt, wenn ich den SQL-Befehl innerhalb des Servers erzeuge. Der von Client gesendete String scheint dort aber nicht anzukommen, vielleicht mache ich da einen prinzipiellen Dnkfehler. Könnte mal jemand drüberschauen und mir sagen warum der String nicht ankommt beim Server? Vielen Dank schon mal vorab.
Hier zunächst der Client:
Und nun noch der Server:
ich sehe wohl mal wieder den Wald vor lauter Bäumen nicht mehr. Ich habe einen einfachen Client und einen einfachen Server geschrieben. Der Client sendet einen
SQL Befehl als String an einen Server, der das Ganze weiterleitet an eine SQLITE-Datenbank und das Resultset dann mittels einer ArrayList an den Client zurückschickt. Das Zurüsckschicken funktioniert, die Daten werden angezeigt, wenn ich den SQL-Befehl innerhalb des Servers erzeuge. Der von Client gesendete String scheint dort aber nicht anzukommen, vielleicht mache ich da einen prinzipiellen Dnkfehler. Könnte mal jemand drüberschauen und mir sagen warum der String nicht ankommt beim Server? Vielen Dank schon mal vorab.
Hier zunächst der Client:
Java:
package mypackage;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
public class ClientDB {
private InetSocketAddress address;
PrintWriter writer;
public void los()
{
try
{
address = new InetSocketAddress("localhost",4243);
Socket s = new Socket();
s.connect(address, 3000); // Verbinde Dich mit dem Server, maximale Wartezeit: 3 Sekunden
writer = new PrintWriter(s.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
writer.println("select * from leute");
writer.flush();
ArrayList <String> al = (ArrayList<String>)(ois.readObject());
System.out.println(al.toString());
ois.close();
s.close();
writer.close();
}
catch(IOException ex) {ex.printStackTrace();}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Client starten:
ClientDB client1 = new ClientDB();
client1.los();
}
}
Und nun noch der Server:
Java:
package mypackage;
import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class ServerDB {
Connection conn;//Schnittstelle um Verbindung zur DB herzustellen
Statement stmt;
ResultSet rSet;
BufferedReader reader;
public void los()
{
try
{
ServerSocket servsock = new ServerSocket(4243); // Verbindungsschnittstelle auf Port 4243 erstellen
while(true)
{
System.out.println("Hallo hier ist der Server!");
Socket sock = servsock.accept(); // Warten auf "Anruf" von einem Client. accept() blockiert bis ein Client "anruft"
InputStreamReader isReader = new InputStreamReader (sock.getInputStream());
reader = new BufferedReader(isReader);
String nachricht = null;
System.out.println("Bin hier");
while((nachricht = reader.readLine()) != null)
{
System.out.println("Empfangene Nachricht: " + nachricht);
}
JOptionPane.showMessageDialog(null, "Nachricht: " + nachricht);
DriverManager.setLogWriter(new PrintWriter(System.out));
Class.forName("org.sqlite.JDBC");
System.out.println("Treiber geladen");
String url = "jdbc:sqlite::resource:"+ "MyDB.db";
conn = DriverManager.getConnection(url,"",""); // Verbindungsobjekt erstellen
System.out.println("Verbindung steht" );
stmt = conn.createStatement();
rSet = stmt.executeQuery(nachricht); // Schicke den SQL-Befehl an die Datenbank und nimm das Ergebnis entgegen
ResultSetMetaData md = rSet.getMetaData(); // Ermittele Meta-Daten des ResultSets
int columns = md.getColumnCount();
System.out.println("Anzahl der Spalten: " + columns + " \n");
ArrayList <String> tabledat = new ArrayList<String>();
while(rSet.next()) { // Solange noch Ergebnisdatensätze da sind...
for(int i=1; i<=columns; ++i) {
// Durchlaufe alle Spalten der aktuellen Zeile des ResultSets
tabledat.add(rSet.getString(i)); // Aktuellen Eintrag des ResultSets in ArrayList speichern
}
}
OutputStream os = sock.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(tabledat);
oos.flush();
oos.close();
servsock.close();
}
}
catch (IOException ex)
{ex.printStackTrace();}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
CloseDB(stmt,conn); // Datenbankverbindung schließen
}
}
public void CloseDB(Statement stmt, Connection conn )
{
try {
stmt.close();
conn.close();
} catch(Exception e) {
//
}
}
public static void main(String[] args) {
// Starte den Server:
ServerDB serv = new ServerDB();
serv.los();
}
}