---
title: 'Schlechter Quellcode von NeuralBuild (NeuralLimits)'
url: 'https://tutego.de/blog/javainsel/2007/12/schlechter-quellcode-von-neuralbuild-neurallimits'
markdown: 'https://tutego.de/blog/javainsel/2007/12/schlechter-quellcode-von-neuralbuild-neurallimits.md'
date: '2007-12-10'
description: 'Über den Artikel http://entwickler.com/itr/news/psecom,neu,1,id,39010,nodeid,82.html bin ich auf einen Generator aufmerksam geworden, der automatisch DOAs und Transfer-Objekte erzeugt. Leider ist doch der generierte Quellcode wenig überzeugend. En Besipiel: public Integer insertCompany(Company …'
taxonomy:
  category:
    - Allgemein
---

# Schlechter Quellcode von NeuralBuild (NeuralLimits)

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Schlechter Quellcode von NeuralBuild (NeuralLimits)

10.12.2007 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Über den Artikel [http://entwickler.com/itr/news/psecom,neu,1,id,39010,nodeid,82.html](http://entwickler.com/itr/news/psecom,neu,1,id,39010,nodeid,82.html "http://entwickler.com/itr/news/psecom,neu,1,id,39010,nodeid,82.html") bin ich auf einen Generator aufmerksam geworden, der automatisch DOAs und Transfer-Objekte erzeugt. Leider ist doch der [generierte Quellcode](http://www.neurallimits.com/content/view/18/) wenig überzeugend. En Besipiel:

```java
    public Integer insertCompany(Company criteriaCompany)        throws NeuralBuildJavaSampleDAOInsertException {        Integer keyVal = new Integer(0);        con = connMgr.getConnection("neuralbuildjavasample");        int setindex = 1;        String vSQL = constructInsertPreparedStatement(criteriaCompany);        try {            PreparedStatement ps = con.prepareStatement(vSQL,                    PreparedStatement.RETURN_GENERATED_KEYS);            if (criteriaCompany.CompanyID_isSet) {                ps.setInt(setindex, criteriaCompany.getCompanyID().intValue());                setindex++;            }            if (criteriaCompany.CompanyName_isSet) {                ps.setDate(setindex,                    (java.sql.Date) criteriaCompany.getCompanyName());                setindex++;            }            ps.executeUpdate();            ResultSet rs = ps.getGeneratedKeys();            if (rs.next()) {                keyVal = Integer.valueOf(rs.getObject(1).toString());            }            rs.close();            rs = null;            ps.close();        } catch (Exception e) {            connMgr.freeConnection("neuralbuildjavasample", con);            throw new NeuralBuildJavaSampleDAOInsertException("Insert Failed " +                e.getMessage(), e);        }        connMgr.freeConnection("neuralbuildjavasample", con);        return keyVal;    }  
```

- new `Integer`(0) wird immer gebaut, auch wenn es später überschrieben wird.
- finally fehlt: So ist das `close()` nicht garantiert. (Nicht sooo schlimm, da bei Freigabe der Connection auch ResultSet und XXXStatement freigegeben werden.) ```

    ```
- Quellcode-Duplizierung bei connMgr.freeConnection("neuralbuildjavasample", con);. Das gehört auf jeden Fall in finally{} ```

    ```
- Was soll den rs = `null`; bewirken? Den GC hilt das bei lokalen Variablen nun wirklich nicht.
- catch (`Exception` e) muss wirklich sein? Ode doch catch (`SQLException` e)?
- Wenn die Rückgabe ein `Integer`-Objekt ist, warum dann „`Integer`.`valueOf`(`rs.getObject(1).toString()`);“ schreiben? Das funktioniert zwar, aber wenn `getObject()` schon in `Integer` ist, muss man nicht erst in ein `String` und dann wieder zurück konvertieren.
- Sollte man wirklich einfach nur 0 zurückliefern, wenn man keinen Schlüssel bekam?

Die anderen Methoden habe auch so ihre Macken, so mit der Namensgebung.

- CachedRowSet Rs = `null`; Groß-/Kleinschreibung!
- Gemische Groß-/Kleinschreibung ist Standard, nicht so bei set**i**ndex.
- Unterstriche sind von Sun in der Namenskonvention nur bei Konstanten vorgesehen, aber nicht etwa bei CompanyID**\_**`isSet`
- Ist die Namensgebung so gut, wenn man liest ps.setDate(setindex, (java.sql.Date) criteriaCompany.getCompanyName() ); Also setDate() auf ein Company-Name?
- Die API-Doku sollte nicht schreiben: „Delete an object from the database.“ sondern laut Suns-JavaDoc-Vorgaben: „Delete**s** an object from the database.“

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: ["Whitespace cleanup on all sources" Java-Quellen endlich einheitlich](https://tutego.de/blog/javainsel/2007/12/whitespace-cleanup-on-all-sources-java-quellen-endlich-einheitlich.md)
- Next: [Warum catch ( Exception e ) schlecht ist, und was man dagegen tun kann](https://tutego.de/blog/javainsel/2007/12/warum-catch-exception-e-schlecht-ist-und-was-man-dagegen-tun-kann.md)
