/***********************************************************************/ /* Verfasser: Prof. Dr. G. Büchel */ /* Source : JDBArt1.java */ /* Zweck : JDBC-Zugriff auf eine Tabelle Artikel */ /* Stand : 05.11.2013 */ /***********************************************************************/ import java.io.*; import java.sql.*; import java.util.*; import oracle.jdbc.pool.*; public class JDBArt1 { /*********************************************************************/ /* main() */ /*********************************************************************/ public static void main(String args[])throws IOException, SQLException { // Datenbankverbindung erstellen mit Hilfe der "connect()"-Methode Connection con = JDBORACON.connect(); int i, eanr, ir, umod, uanr=0; String rart, vgl; double epr=0.; LinkedList lx; LinkedList lmd1; i=menue(); switch(i) {case 1: lx=liesAllArt(con); ausArt(lx); break; case 2: System.out.println("Mit welcher Zeichenfolge soll ARTBEZ beginnen?"); vgl=IO1.einstring(); lx=liesLikeArt(con,vgl); ausArt(lx); break; case 3: System.out.println("Eingabe einer Artikelnummer:"); eanr=IO1.einint(); rart=liesEinArt(con,eanr); System.out.println(rart); break; case 4: System.out.println("Bitte vollen Namen der CSV-Datei eingeben:"); vgl=IO1.einstring(); ir=csv2Insert(con,vgl); System.out.println(ir+" Zeilen eingefuegt."); break; case 5: System.out.println("Bitte die UPDATE-Art eingeben:"); System.out.println("(1) Neuer Preis fuer einen Artikel:"); System.out.println("(2) Preissatz, um den alle Artikelerhöht werden:"); umod=IO1.einint(); switch (umod) {case 1: System.out.println("Eingabe einer Artikelnummer:"); uanr=IO1.einint(); System.out.println("Eingabe eines neuen Preises:"); epr=IO1.eindouble(); break; case 2: System.out.println("Prozentsatz der Preiserhöhung?"); epr=IO1.eindouble(); break; default: umod=-9; System.out.println("Falsche UPDATE-Art!"); } if (umod!=9) {ir=artUPDpr1(con,umod,epr,uanr); System.out.println(ir+" Zeile(n) geaendert."); } break; case 6: System.out.println("Bitte die Artikelnummer des zu loeschenden Artikels eingeben:"); uanr=IO1.einint(); ir=artDEL(con,uanr); System.out.println(ir+" Zeile geloescht."); break; case 7: lmd1=artMETADATA(con); ausMD(lmd1); break; default: i=9; } } static int menue() {int r=-1; do {System.out.println("Verwaltung der Tabelle Artikel: Waehlen Sie:"); System.out.println("(1) Anzeige aller Artikel"); System.out.println("(2) Lesen von Artikeln mit LIKE"); System.out.println("(3) Lesen eines Artikels mit PRIK-Wert"); System.out.println("(4) INSERT von Artikeln aus CSV-Datei"); System.out.println("(5) UPDATE eines/mehrerer Artikel"); System.out.println("(6) DELETE eines Artikels"); System.out.println("(7) METADATEN der Artikeltabelle abfragen"); System.out.println("(9) ENDE"); r=IO1.einint(); } while (r<1); return r; } static LinkedList liesAllArt(Connection c1) {LinkedList lz=new LinkedList(); // Vorbereitung der benötigten JDBC Objekte zur Kommunikation mit der DB Statement Stmt; ResultSet RS; String SQL; int aartnr; String aartbez; double apreis; Artikel ax; try {// Erzeugen eines Statements aus der DB-Verbindung Stmt = c1.createStatement(); /*********************************************************************/ /* SELECT Anfrage auf alle Artikel */ /*********************************************************************/ SQL = "SELECT artnr,artbez,preis FROM Artikel ORDER BY artnr"; // SQL-Anweisung ausführen und Ergebnis in ein ResultSet schreiben RS = Stmt.executeQuery(SQL); // Das ResultSet zeilenweise durchlaufen while(RS.next()) {aartbez = RS.getString("artbez"); aartnr = RS.getInt("artnr"); apreis = RS.getDouble("preis"); ax=new Artikel(aartnr,aartbez,apreis); lz.add(ax); } RS.close(); Stmt.close(); // SQL Exception abfangen } catch (SQLException e){ System.out.println(e.getMessage()); System.out.println("SQL Exception wurde geworfen!"); } return lz; } static LinkedList liesLikeArt(Connection c1, String vg1) {LinkedList lz=new LinkedList(); // Vorbereitung der benötigten JDBC Objekte zur Kommunikation mit der DB Statement Stmt; ResultSet RS; String SQL; int aartnr; String aartbez; double apreis; Artikel ax; try {// Erzeugen eines Statements aus der DB-Verbindung Stmt = c1.createStatement(); /*********************************************************************/ /* SELECT Anfrage auf Artikel mit LIKE */ /*********************************************************************/ SQL = "SELECT artnr,artbez,preis FROM Artikel WHERE artbez Like '"+vg1+"%'"; // SQL-Anweisung ausführen und Ergebnis in ein ResultSet schreiben RS = Stmt.executeQuery(SQL); // Das ResultSet zeilenweise durchlaufen while(RS.next()) {aartbez = RS.getString("artbez"); aartnr = RS.getInt("artnr"); apreis = RS.getDouble("preis"); ax=new Artikel(aartnr,aartbez,apreis); lz.add(ax); } RS.close(); Stmt.close(); // SQL Exception abfangen } catch (SQLException e){ System.out.println(e.getMessage()); System.out.println("SQL Exception wurde geworfen!"); } return lz; } static String liesEinArt(Connection c1, int eart) {String r="Kein Eintrag fuer artnr="+eart; // Vorbereitung der benötigten JDBC Objekte zur Kommunikation mit der DB Statement Stmt; ResultSet RS; String SQL; int aartnr; String aartbez; double apreis; Artikel ax; try {// Erzeugen eines Statements aus der DB-Verbindung Stmt = c1.createStatement(); /*********************************************************************/ /* SELECT Anfrage fuer ein Artikel */ /*********************************************************************/ SQL = "SELECT artnr,artbez,preis FROM Artikel WHERE artnr="+eart; // SQL-Anweisung ausführen und Ergebnis in ein ResultSet schreiben RS = Stmt.executeQuery(SQL); // Das ResultSet zeilenweise durchlaufen RS.next(); aartbez = RS.getString("artbez"); aartnr = RS.getInt("artnr"); apreis = RS.getDouble("preis"); ax=new Artikel(aartnr,aartbez,apreis); r="Gesuchter Artikel : "+ax.art2CSV(); RS.close(); Stmt.close(); // SQL Exception abfangen } catch (SQLException e){ System.out.println(e.getMessage()); System.out.println("SQL Exception wurde geworfen!"); } //catch (SQLNotFoundException e){ // r="Zur Nr.:"+eart+" kein Artikel vorhanden"; //} return r; } static int csv2Insert(Connection c1, String dsn) throws IOException {int r=0, dz=0, iz=0; // Vorbereitung der benötigten JDBC Objekte zur Kommunikation mit der DB Statement Stmt; ResultSet RS; String SQL,h; Artikel ax; FileReader fr1=new FileReader(dsn); BufferedReader br1=new BufferedReader(fr1); h=br1.readLine(); while(h!=null) {dz=dz+1; ax=new Artikel(h); if (ax.artnr==-1) {System.out.println("Kein INSERT fuer: "+h); h=br1.readLine(); continue; } try {Stmt = c1.createStatement(); /*********************************************************************/ /* INSERT fuer ein Artikel */ /*********************************************************************/ SQL="INSERT INTO Artikel(artnr,artbez,preis) VALUES("+ax.artnr+",'"+ax.artbez+"',"+ax.preis+")"; // INSERT ausführen iz = Stmt.executeUpdate(SQL); r=r+iz; Stmt.close(); } catch (SQLException e){ System.out.println(e.getMessage()); System.out.println("SQL Exception wurde geworfen!"); } h=br1.readLine(); } return r; } static int artUPDpr1(Connection c1, int umod, double epr, int uanr) {int ir=0; double a=1.; // Vorbereitung der benötigten JDBC Objekte zur Kommunikation mit der DB Statement Stmt; ResultSet RS; String SQL, SQLE=""; try {Stmt = c1.createStatement(); /*********************************************************************/ /* UPDATE fuer einen bzw. mehrere Artikel */ /*********************************************************************/ SQL="UPDATE Artikel SET preis="; a=1.+epr/100.; if (umod==1) SQLE=""+epr+" WHERE artnr="+uanr; if (umod==2) SQLE=""+a+"*preis"; // UPDATE ausführen SQL=SQL+SQLE; ir = Stmt.executeUpdate(SQL); Stmt.close(); } catch (SQLException e){ System.out.println(e.getMessage()); System.out.println("SQL Exception wurde geworfen!"); } return ir; } static int artDEL(Connection c1, int uanr) {int ir=0; // Vorbereitung der benötigten JDBC Objekte zur Kommunikation mit der DB Statement Stmt; ResultSet RS; String SQL; try {Stmt = c1.createStatement(); /*********************************************************************/ /* DELETE eines Artikels */ /*********************************************************************/ SQL="DELETE FROM Artikel WHERE artnr="+uanr; // DELETE ausführen ir = Stmt.executeUpdate(SQL); Stmt.close(); } catch (SQLException e){ System.out.println(e.getMessage()); System.out.println("SQL Exception wurde geworfen!"); } return ir; } static LinkedList artMETADATA(Connection c1) {LinkedList lz=new LinkedList(); // Vorbereitung der benötigten JDBC Objekte zur Kommunikation mit der DB Statement Stmt; ResultSet RS; ResultSetMetaData rsmd1; AMeta x; String SQL; int spanz,stanz,i; String colnam; String coldtyp; int nako; try {// Erzeugen eines Statements aus der DB-Verbindung Stmt = c1.createStatement(); /*********************************************************************/ /* SELECT Anfrage auf alle Artikel */ /*********************************************************************/ SQL = "SELECT artnr,artbez,preis FROM Artikel ORDER BY artnr"; // SQL-Anweisung ausführen und Ergebnis in ein ResultSet schreiben RS = Stmt.executeQuery(SQL); // Metadatenabfrage rsmd1=RS.getMetaData(); spanz=rsmd1.getColumnCount(); for(i=1;i<=spanz;i++) {colnam = rsmd1.getColumnName(i); coldtyp= rsmd1.getColumnTypeName(i); x=new AMeta(colnam,coldtyp); lz.add(x); } RS.close(); Stmt.close(); // SQL Exception abfangen } catch (SQLException e){ System.out.println(e.getMessage()); System.out.println("SQL Exception wurde geworfen!"); } return lz; } static void ausArt(LinkedList lx) {Artikel ah; int i,iz; iz=lx.size(); System.out.println("Ergebnisliste der Anfrage auf die Tabelle Artikel:"); System.out.println("artnr;artbez;preis"); for(i=0;i ly) {AMeta ay; int i,iz; iz=ly.size(); System.out.println("Relationenschema (JDBC-Abfrage) der Tabelle Artikel:"); System.out.println("Spaltenname;Datentyp der Spalte"); for(i=0;i