Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package abiTraining.buchhandel;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.UnsupportedEncodingException;
- import java.net.Socket;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class ServerClientThread extends Thread {
- private Statement stmt;
- Socket s;
- InputStreamReader in;
- OutputStreamWriter out;
- public ServerClientThread(Socket s) {
- this.s = s;
- }
- @Override
- public void run() {
- Connection conn;
- try {
- conn = DriverManager.getConnection("jdbc:mysql://localhost/buchladen", "root", "root");
- stmt = conn.createStatement();
- String sql = "SELECT isbn, titel, autor FROM buch ORDER BY titel";
- System.out.println(sql);
- ResultSet rs = stmt.executeQuery(sql);
- in = new InputStreamReader(s.getInputStream(), "UTF-8");
- out = new OutputStreamWriter(s.getOutputStream(), "UTF-8");
- out.write("L");
- while (rs.next()) {
- out.write(rs.getString(1) + " " + rs.getString(2) + " (" + rs.getString(3) + ")§");
- }
- out.write('$');
- out.flush();
- System.out.println("Liste gesendet");
- int zeichen;
- while ((zeichen = in.read()) != -1) {
- switch (zeichen) {
- case 'B':
- System.out.println("Bestellung eingegangen");
- bestellen();
- break;
- case 'S':
- System.out.println("Stornierung eingegangen");
- stornieren();
- break;
- default:
- System.out.println("Unbekannten Befehl erhalten");
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private void bestellen() throws IOException, SQLException {
- int zeichen;
- String erhalteneZeile = "";
- while ((zeichen = in.read()) != '%') {
- erhalteneZeile += (char) zeichen;
- }
- System.out.println("Vom Klienten erhaltene Zeile: " + erhalteneZeile);
- String kundennr = erhalteneZeile.substring(0, erhalteneZeile.indexOf('$'));
- String isbn = erhalteneZeile.substring(erhalteneZeile.indexOf('$') + 1, erhalteneZeile.indexOf("§"));
- int anzahlKlient = Integer
- .parseInt(erhalteneZeile.substring(erhalteneZeile.indexOf("§") + 1, erhalteneZeile.length()));
- String sql = "SELECT bestand FROM buch WHERE isbn = '" + isbn + "'";
- System.out.println(sql);
- ResultSet rs = stmt.executeQuery(sql);
- int realAnzahl = 0;
- if (rs.next()) {
- realAnzahl = rs.getInt(1);
- }
- if (realAnzahl < anzahlKlient) {
- out.write("N" + realAnzahl + "$");
- out.flush();
- } else {
- String updateSQL;
- int anzahlChangedColumns;
- sql = "SELECT kundennr FROM kunde WHERE kundennr = '" + kundennr + "'";
- System.out.println(sql);
- rs = stmt.executeQuery(sql);
- if (!rs.next()) {
- System.out.println("Kunde noch nicht vorhanden, wird nun angelegt");
- updateSQL = "INSERT INTO kunde VALUES ('" + kundennr + "', 'default', 'default')";
- System.out.println(updateSQL);
- anzahlChangedColumns = stmt.executeUpdate(updateSQL);
- if (anzahlChangedColumns == 1) {
- System.out.println("Kunde mit der Nr.:" + kundennr + " erfolgreich angelegt");
- } else {
- System.out.println("Fehler beim Anlegen des Kunden mit der Nr.: " + kundennr + " aufgetreten");
- return;
- }
- } else {
- System.out.println("Kunde bereits vorhanden");
- }
- updateSQL = "INSERT INTO bestellung VALUES (NULL, '" + kundennr + "', '" + isbn + "', '" + anzahlKlient
- + "')";
- System.out.println(updateSQL);
- anzahlChangedColumns = stmt.executeUpdate(updateSQL);
- if (anzahlChangedColumns == 1) {
- updateSQL = "UPDATE buch SET bestand = '" + (realAnzahl - anzahlKlient) + "' WHERE isbn = '" + isbn
- + "'";
- System.out.println(updateSQL);
- anzahlChangedColumns = stmt.executeUpdate(updateSQL);
- if (anzahlChangedColumns == 1) {
- out.write("J");
- out.flush();
- }
- }
- }
- }
- private void stornieren() throws IOException, SQLException {
- int zeichen;
- String erhalteneZeile = "";
- String updateSQL;
- while ((zeichen = in.read()) != '§') {
- erhalteneZeile += (char) zeichen;
- }
- System.out.println("Vom Klienten erhaltene Zeile: " + erhalteneZeile);
- String kundennr = erhalteneZeile.substring(0, erhalteneZeile.indexOf("$"));
- String isbn = erhalteneZeile.substring(erhalteneZeile.indexOf("$") + 1, erhalteneZeile.length());
- String sql = "SELECT anzahl FROM bestellung WHERE kundennr = '" + kundennr + "' AND isbn = '" + isbn + "'";
- System.out.println(sql);
- ResultSet rs = stmt.executeQuery(sql);
- int anzahlInsgesamtStornierterBuecher = 0;
- while (rs.next()) {
- anzahlInsgesamtStornierterBuecher += rs.getInt("anzahl");
- }
- System.out.println("Anzahl insgesamt zu stornierenden Buecher: " + anzahlInsgesamtStornierterBuecher);
- sql = "SELECT bestand FROM buch WHERE isbn = '" + isbn + "'";
- System.out.println(sql);
- rs = stmt.executeQuery(sql);
- int aktuellerBestand = 0;
- if (rs.next()) {
- aktuellerBestand = rs.getInt("bestand");
- }
- updateSQL = "UPDATE buch SET bestand = " + (aktuellerBestand + anzahlInsgesamtStornierterBuecher)
- + " WHERE isbn = '" + isbn + "'";
- System.out.println(updateSQL);
- int anzahlChangedColumns = stmt.executeUpdate(updateSQL);
- if (anzahlChangedColumns == 1) {
- updateSQL = "DELETE FROM bestellung WHERE kundennr = '" + kundennr + "' AND isbn = '" + isbn + "'";
- System.out.println(updateSQL);
- anzahlChangedColumns = stmt.executeUpdate(updateSQL);
- if (anzahlChangedColumns > 0) {
- System.out.println("Erfolgreich storniert");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement