Advertisement
Guest User

Untitled

a guest
Apr 15th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.65 KB | None | 0 0
  1. package abiTraining.buchhandel;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.io.UnsupportedEncodingException;
  7. import java.net.Socket;
  8. import java.sql.Connection;
  9. import java.sql.DriverManager;
  10. import java.sql.ResultSet;
  11. import java.sql.SQLException;
  12. import java.sql.Statement;
  13.  
  14. public class ServerClientThread extends Thread {
  15. private Statement stmt;
  16. Socket s;
  17. InputStreamReader in;
  18. OutputStreamWriter out;
  19.  
  20. public ServerClientThread(Socket s) {
  21. this.s = s;
  22. }
  23.  
  24. @Override
  25. public void run() {
  26. Connection conn;
  27. try {
  28. conn = DriverManager.getConnection("jdbc:mysql://localhost/buchladen", "root", "root");
  29. stmt = conn.createStatement();
  30. String sql = "SELECT isbn, titel, autor FROM buch ORDER BY titel";
  31. System.out.println(sql);
  32. ResultSet rs = stmt.executeQuery(sql);
  33.  
  34. in = new InputStreamReader(s.getInputStream(), "UTF-8");
  35. out = new OutputStreamWriter(s.getOutputStream(), "UTF-8");
  36.  
  37. out.write("L");
  38. while (rs.next()) {
  39. out.write(rs.getString(1) + " " + rs.getString(2) + " (" + rs.getString(3) + ")§");
  40. }
  41. out.write('$');
  42. out.flush();
  43. System.out.println("Liste gesendet");
  44.  
  45. int zeichen;
  46. while ((zeichen = in.read()) != -1) {
  47. switch (zeichen) {
  48. case 'B':
  49. System.out.println("Bestellung eingegangen");
  50. bestellen();
  51. break;
  52. case 'S':
  53. System.out.println("Stornierung eingegangen");
  54. stornieren();
  55. break;
  56. default:
  57. System.out.println("Unbekannten Befehl erhalten");
  58. }
  59. }
  60. } catch (SQLException e) {
  61. e.printStackTrace();
  62. } catch (UnsupportedEncodingException e) {
  63. e.printStackTrace();
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68.  
  69. private void bestellen() throws IOException, SQLException {
  70. int zeichen;
  71. String erhalteneZeile = "";
  72. while ((zeichen = in.read()) != '%') {
  73. erhalteneZeile += (char) zeichen;
  74. }
  75. System.out.println("Vom Klienten erhaltene Zeile: " + erhalteneZeile);
  76. String kundennr = erhalteneZeile.substring(0, erhalteneZeile.indexOf('$'));
  77. String isbn = erhalteneZeile.substring(erhalteneZeile.indexOf('$') + 1, erhalteneZeile.indexOf("§"));
  78. int anzahlKlient = Integer
  79. .parseInt(erhalteneZeile.substring(erhalteneZeile.indexOf("§") + 1, erhalteneZeile.length()));
  80. String sql = "SELECT bestand FROM buch WHERE isbn = '" + isbn + "'";
  81. System.out.println(sql);
  82. ResultSet rs = stmt.executeQuery(sql);
  83. int realAnzahl = 0;
  84. if (rs.next()) {
  85. realAnzahl = rs.getInt(1);
  86. }
  87.  
  88. if (realAnzahl < anzahlKlient) {
  89. out.write("N" + realAnzahl + "$");
  90. out.flush();
  91. } else {
  92. String updateSQL;
  93. int anzahlChangedColumns;
  94. sql = "SELECT kundennr FROM kunde WHERE kundennr = '" + kundennr + "'";
  95. System.out.println(sql);
  96. rs = stmt.executeQuery(sql);
  97. if (!rs.next()) {
  98. System.out.println("Kunde noch nicht vorhanden, wird nun angelegt");
  99. updateSQL = "INSERT INTO kunde VALUES ('" + kundennr + "', 'default', 'default')";
  100. System.out.println(updateSQL);
  101. anzahlChangedColumns = stmt.executeUpdate(updateSQL);
  102.  
  103. if (anzahlChangedColumns == 1) {
  104. System.out.println("Kunde mit der Nr.:" + kundennr + " erfolgreich angelegt");
  105. } else {
  106. System.out.println("Fehler beim Anlegen des Kunden mit der Nr.: " + kundennr + " aufgetreten");
  107. return;
  108. }
  109. } else {
  110. System.out.println("Kunde bereits vorhanden");
  111. }
  112. updateSQL = "INSERT INTO bestellung VALUES (NULL, '" + kundennr + "', '" + isbn + "', '" + anzahlKlient
  113. + "')";
  114. System.out.println(updateSQL);
  115. anzahlChangedColumns = stmt.executeUpdate(updateSQL);
  116.  
  117. if (anzahlChangedColumns == 1) {
  118. updateSQL = "UPDATE buch SET bestand = '" + (realAnzahl - anzahlKlient) + "' WHERE isbn = '" + isbn
  119. + "'";
  120. System.out.println(updateSQL);
  121. anzahlChangedColumns = stmt.executeUpdate(updateSQL);
  122.  
  123. if (anzahlChangedColumns == 1) {
  124. out.write("J");
  125. out.flush();
  126. }
  127. }
  128. }
  129. }
  130.  
  131. private void stornieren() throws IOException, SQLException {
  132. int zeichen;
  133. String erhalteneZeile = "";
  134. String updateSQL;
  135.  
  136. while ((zeichen = in.read()) != '§') {
  137. erhalteneZeile += (char) zeichen;
  138. }
  139. System.out.println("Vom Klienten erhaltene Zeile: " + erhalteneZeile);
  140. String kundennr = erhalteneZeile.substring(0, erhalteneZeile.indexOf("$"));
  141. String isbn = erhalteneZeile.substring(erhalteneZeile.indexOf("$") + 1, erhalteneZeile.length());
  142.  
  143. String sql = "SELECT anzahl FROM bestellung WHERE kundennr = '" + kundennr + "' AND isbn = '" + isbn + "'";
  144. System.out.println(sql);
  145. ResultSet rs = stmt.executeQuery(sql);
  146.  
  147. int anzahlInsgesamtStornierterBuecher = 0;
  148. while (rs.next()) {
  149. anzahlInsgesamtStornierterBuecher += rs.getInt("anzahl");
  150. }
  151. System.out.println("Anzahl insgesamt zu stornierenden Buecher: " + anzahlInsgesamtStornierterBuecher);
  152.  
  153. sql = "SELECT bestand FROM buch WHERE isbn = '" + isbn + "'";
  154. System.out.println(sql);
  155. rs = stmt.executeQuery(sql);
  156. int aktuellerBestand = 0;
  157. if (rs.next()) {
  158. aktuellerBestand = rs.getInt("bestand");
  159. }
  160.  
  161. updateSQL = "UPDATE buch SET bestand = " + (aktuellerBestand + anzahlInsgesamtStornierterBuecher)
  162. + " WHERE isbn = '" + isbn + "'";
  163. System.out.println(updateSQL);
  164. int anzahlChangedColumns = stmt.executeUpdate(updateSQL);
  165.  
  166. if (anzahlChangedColumns == 1) {
  167. updateSQL = "DELETE FROM bestellung WHERE kundennr = '" + kundennr + "' AND isbn = '" + isbn + "'";
  168. System.out.println(updateSQL);
  169. anzahlChangedColumns = stmt.executeUpdate(updateSQL);
  170.  
  171. if (anzahlChangedColumns > 0) {
  172. System.out.println("Erfolgreich storniert");
  173. }
  174. }
  175. }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement