[Java] Quellcode optimieren (JDBC)

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von GaYlORd, 4. Februar 2011 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 4. Februar 2011
    Quellcode optimieren (JDBC)

    Hallo,

    wir müssen in der Uni in Datenbanken Javaprogramme schreiben, die sich mit der Datenbank verbinden, etc.

    Bin leider nicht soo gut in Java, deswegen wäre es super, wenn sich den Code von mir jemand anschauen würde. Funktionieren tut alles, wie es soll, nur weiß ich halt nicht, wie "umständlich" ich das jetzt gemacht hab.

    Und ginge das Programm auch in nur einer Datei zu schreiben? Eclipse hat bei mir gemeckert wegen static und private. Aber das versteh ich nicht wirklich^^

    Hier das Programm:
    Die Main.java
    Code:
    public class Main{
    
     private static SQL sql;
    
     public static void main(String[] args) throws Exception {
     //Verbindung herstellen
     sql = new SQL();
     System.out.println(sql.establishConnection());
     
     //tabelle erstellen:
     String stmt = new String("CREATE TABLE Papers(id integer PRIMARY KEY, title VARCHAR(255), pdf BLOB)");
     System.out.println(sql.executeStatement(stmt));
     sql.insertValues();
     stmt = new String("CREATE PROCEDURE insertPdf(idi integer, pdfi blob) AS BEGIN UPDATE Papers SET pdf = pdfi WHERE id = idi; END insertPdf;");
     System.out.println(sql.executeStatement(stmt));
     
     sql.insertData(1,"key_de.pdf");
     sql.insertData(2,"key_fr.pdf");
     sql.insertData(3,"key_es.pdf");
     
     //Verbindung schließen
     System.out.println("Schließen erfolgreich? " +sql.closeConnection());
     }
    }
    
    und die SQL.java:
    Code:
    import java.io.File;
    import java.io.FileInputStream;
    import java.sql.BatchUpdateException;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import oracle.jdbc.driver.OracleDriver;
    
    
    public class SQL {
     private String dbUrl="link zur oracle datenbank";
     private String login = "nutzername"; // Der entspricht dem PW, deswegen ist PW nicht extra als String initialisiert
     private Connection openConnection;
     private Connection dbConn = null;
     
     public void insertData(Integer id, String pdf) throws Exception{
     try{
     File pdfFile = new File(pdf);
     FileInputStream pdfFis = new FileInputStream(pdfFile);
     
     CallableStatement cstmt = this.openConnection.prepareCall("{CALL insertPdf(?, ?)}");
     cstmt.setInt(1,id);
     cstmt.setBinaryStream(2, pdfFis, (int)pdfFile.length());
     
     cstmt.executeUpdate();
     
     pdfFis.close();
     cstmt.close();
     }
     catch(Exception e){
     throw e;
     }
     }
     
     void insertValues() throws SQLException{
     try{
     this.openConnection.setAutoCommit(false); 
     Statement stmt = this.openConnection.createStatement(); 
     stmt.addBatch("INSERT INTO Papers values(1, 'ECTS-GRUNDSÄTZE', EMPTY_BLOB())");
     stmt.addBatch("INSERT INTO Papers values(2, 'PRINZIPALES CARACTERISTIQUS DE L´ECTS', EMPTY_BLOB())");
     stmt.addBatch("INSERT INTO Papers values(3, 'CARACTERÍSTICAS PRINCIPALES DE LOS ECTS', EMPTY_BLOB())");
     stmt.executeBatch();
     this.openConnection.commit();
     stmt.close();
     }
     catch(BatchUpdateException b){
     // Falls beim batch update Fehler auftritt --> rollback
     this.openConnection.rollback();
     throw b;
     }
     catch(SQLException e){
     //Falls ein SQL-Fehler auftritt --> rollback
     this.openConnection.rollback();
     throw e;
     }
     finally{
     this.openConnection.setAutoCommit(true);
     }
     }
     
     boolean executeStatement(String statement){
     Statement stmt;
     try{
     stmt = this.openConnection.createStatement();
     stmt.executeUpdate(statement);
     return true;
     }catch(SQLException e){
     e.printStackTrace();
     System.out.println(e.getMessage());
     return false;
     }
     } 
     
     boolean establishConnection(){
     try{
     DriverManager.registerDriver(new OracleDriver());
     this.openConnection = DriverManager.getConnection(this.dbUrl,this.login,this.login);
     return !this.openConnection.isClosed();
     }
     catch(SQLException e){
     e.printStackTrace();
     return false;
     }
     }
     
     boolean closeConnection(){
     try{
     this.dbConn = DriverManager.getConnection(this.dbUrl,this.login,this.login);
     this.dbConn.commit();
     this.dbConn.close();
     this.dbConn = null;
     return true;
     }
     catch(SQLException e){
     System.out.println("Fehler beim schließen der Datenbankverbindung: "+e.getMessage());
     return false;
     }
     }
    
    }
    
    Was macht das Programm?
    Es soll eine Realtion "papers" erstellen in das dann PDF Dateien eingefügt werden. Die PDFs werden dauerhaft als Prozedur (PROCEDURE) in der Datenbank gespeichert und mit Papers verlinkt.

    Danke schonmal!
    Gruß
    gl
     
  2. 8. Februar 2011
    AW: Quellcode optimieren (JDBC)

    Hab mir den Quellcode jetzt nicht komplett angeschaut und nur überflogen.

    Beim Programmieren finde ich ist es erstmal nicht wichtig, ob du was kompliziert gemacht hast oder nicht.
    Oftmals ist das durch die heutige Rechenpower eh wurscht.
    D.h. wenn das Programm nicht gerade ewig brauch und man nicht für zB Serverbetrieb mit 999999999 Zugriffe/s arbeitet dann funktioniert das Programm, mehr solls ja dann nicht.

    Auch alles in eine "Datei" zu schreiben finde ich eher unschön. Warum?
    Java lebt doch durch OOP, dass sollte man auch ausnutzen. Auch kleine Programme sollten somit mehrere Klassen haben.
    Wenn du das dann sauber machst kannst du zB die SQL Klasse beim nächsten Programm wiederverwenden.
     
  3. 9. Februar 2011
    AW: Quellcode optimieren (JDBC)

    Danke für deine Erklärungen!!
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.