Frage

Ich probiere eine Web-App mit Servlets und JSPs aus und muss die ISO-Nummer eines Elements in meiner Klasse sowie in Hibernate-Zuordnungen modellieren.Welcher Typ sollte eine ISBN-Nummer sein? Long oder String?Ich bin auf viele Tutorials gestoßen, die beides verwenden.isbn ist angeblich eine 10-stellige Kennung. Manchmal stößt man auf Zahlen wie 0-85131-041-9, die kein Long sein können. In einigen Beispielen werden Zahlen ohne Bindestriche verwendet.

Also, welcher Typ sollte es sein?Irgendwelche Vorschläge?

Danke

markieren

War es hilfreich?

Lösung

Ich würde es in einem aufbewahren Long Eigenschaft und verwenden Sie einen Formatierer/einen Parser (im Wesentlichen einen Konverter). Wenn Sie es anzeigen, sollte der Konverter das einfach konvertieren Long Eigentum zu einer menschlichen Darstellung mit Bindestrichen an den richtigen Stellen. Wenn Sie es validieren/bestehen, sollte der Konverter alle Bindestriche aus dem eingereichten Wert entfernen und ihn in a einsetzen Long Eigentum.

Grundsätzlich ist es die gleiche Idee, wie Sie für a verwenden würden Date Feld, das Sie in der menschlichen Repräsentation mit Hilfe von formatieren/analysieren SimpleDateFormat. Der einzige Unterschied besteht darin, dass das ISBN -Formatierer/der Parser nicht von der Standard -Java -SE -API verfügbar ist. Sie müssten selbst eine schreiben oder eine Drittanbieter adoptieren (von dem keiner vorhanden ist). Schließlich kann dieser Konverter dann als JSP -Tag verwendet werden (wie JSTLs <fmt:formatDate>) oder eine eigenständige Java -Klasse, die von einer EL -Funktion oder wenn Sie JSF verwenden, a @FacesConverter Klasse.

Aufgrund des Komplexiteits der ISBN -Zahl wird dies tatsächlich mehr als oft als oft gespeichert String Damit der Entwickler sich keine Sorgen um gültige Muster machen muss. Ob gut oder schlecht, ist eine Frage, die Sie sich und Ihrem Team stellen sollen.

Andere Tipps

ISBN hat 13 Ziffern (siehe Wiki). Ich würde eine Klasse verwenden, die die Gültigkeit von gegebener Überprüfung überprüft String. Etwas wie:

class ISBN {
  private String isbn;
  public ISBN(String isbn) throws ISBNFormatException {
    // you might want to filter hyphens first, before the check
    if(ISBN.isValid(isbn)) this.isbn = isbn;
    else throw new ISBNFormatException(isbn);
  }
  public static boolean isValid(String s) {
   // validate number here, see wiki
  }
}

Dies kann natürlich ein bisschen zu viel sein. Wenn Ihre App wirklich einfach ist, können Sie mit gehen String Alles gut.

Bearbeiten Die Bindung unterteilt die Zahl in Gruppen (Sprache, Verlag usw.). Was die Einzigartigkeit der Anzahl betrifft, spielt die Bindung (oder die Teilung mit Räumen) jedoch keine Rolle.

Tatsächlich besteht die ISBN nicht aus 10 Ziffern, sondern aus 12 Ziffern + einem Scheck ISBN-FAQ Der Scheck kann ein X sein

Die Methode zur Bestimmung der Prüfziffer für die ISBN ist der Modul 11 ​​mit den Gewichtungsfaktoren 10 zu 1.Die römische Zahl X wird anstelle der 10 verwendet, wo die Zehn als Prüfziffer vorkommen würde.

Wenn Sie Informationen speichern, die ein Benutzer eingegeben hat, sollten Sie die Prüfziffer einschließen, daher muss es sich um eine Zeichenfolge handeln.

Wenn Sie die tatsächliche ISBN speichern, können Sie die Prüfung ignorieren, da Sie diese berechnen können.Wenn Sie jedoch die neuen 12 Ziffern verwenden, sind die Zahlen größer, als ein Long-Wert aufnehmen kann. Wenn Sie die alten 10 Ziffern verwenden, könnten sie in einem Long-Wert gehalten werden, Sie müssten jedoch daran denken, möglicherweise führende Nullen wieder hinzuzufügen.In diesem Fall würde ich es also in einer Zeichenfolge halten und alle nicht numerischen Daten entfernen, z. B.Bindestriche.

Wenn man sich auch diese FAQ ansieht, gibt es einen möglichen Grund, die ISBn aufgeteilt zu speichern, um die Suche nach Teilen zu ermöglichen.

Die fünf Teile einer ISBN sind wie folgt:
1.Der aktuellen ISBN-13 wird „978“ vorangestellt.
2.Gruppen- oder Länderkennung, die eine nationale oder geografische Gruppierung von Verlagen identifiziert;
3.Herausgeber-ID, die einen bestimmten Herausgeber innerhalb einer Gruppe identifiziert;
4.Titelidentifikator, der einen bestimmten Titel oder eine bestimmte Ausgabe eines Titels identifiziert;
5.Die Prüfziffer ist die einzelne Ziffer am Ende der ISBN, die die ISBN validiert.

und 5 muss nicht gespeichert werden, da er berechnet werden kann, muss jedoch von Benutzern erfasst werden, um die Eingabe zu validieren.

Diese Frage hat wirklich nichts mit J2EE zu tun, aber einfach nur mit Java -Datenatypen und möglicherweise den Datentypen in Ihrer Datenbank -Engine.

Wenn Sie die Bindestriche in eine Ausgabe einbeziehen möchten, müssen Sie sie so ziemlich als Zeichenfolge speichern. Es sei denn, Sie möchten Code schreiben, um herauszufinden, wohin die Bindestriche gehen, aber die Regeln dahinter sind ziemlich kompliziert, abhängig von den Werten der Ziffern zu Beginn der Zahl. (Wenn Sie an einem System arbeiten, das ISBNs zuweist oder sie auseinander nimmt und mit den Teilen arbeitet, möchten Sie dies vielleicht. Wenn Sie nur möchten, dass der Benutzer es eingeben und Sie sich daran erinnern, klingt dies nach zu viel Ärger .))

Ich denke, wenn Sie sich nicht um die Bindestriche kümmern, könnten Sie eine Zeichenfolge oder eine lange Verwendung verwenden. Trotzdem wäre ein langer Schmerz darin, dass Sie herausfinden müssten, wann Sie führende Nullen anzeigen müssen.

Kurze Antwort: Ich sehe keinen Vorteil, es als Nummer zu speichern. Verwenden Sie eine Zeichenfolge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top