Question

Je suis d'essayer une application web en utilisant des servlets et des JSP et des besoins au numéro de modèle isbn d'un élément dans ma classe, ainsi que dans les correspondances mise en veille prolongée. Ce qui devrait être le type d'un numéro isbn? Long ou une chaîne? Je l'avais rencontré de nombreux tutoriels qui utilisent l'un d'eux .. isbn est censé être un 10 chiffres identifier..sometimes vous croiserez nombres comme 0-85131-041-9 qui ne peut pas être un long exemples ..Some utilisent des nombres sans traits d'union ..

Alors, qui devrait être le type? Toutes les suggestions?

Merci

marque

Était-ce utile?

La solution

Je stocker dans une propriété Long et utiliser un formatter / analyseur (essentiellement, un convertisseur). Lorsque vous allez l'afficher, le convertisseur doit simplement convertir la propriété Long à une représentation humaine avec des traits d'union dans les bons endroits. Lorsque vous allez validate / persistent il, le convertisseur doit supprimer tous les traits d'union de la valeur soumise et le mettre dans une propriété Long.

En fait, c'est la même idée que vous utiliseriez pour un champ de Date que vous formatez / parse dans la représentation humaine avec l'aide de SimpleDateFormat. La seule différence est que le formatter ISBN / analyseur est pas disponible par l'API standard Java SE. Vous aurez besoin d'écrire vous-même ou à adopter une 3ème partie (dont aucune ne vient à l'esprit si existant). Enfin ce convertisseur peut alors être utilisé comme une balise JSP (comme le <fmt:formatDate> de JSTL) ou une classe Java autonome qui est invoquée par une fonction EL ou lorsque vous utilisez JSF, une classe @FacesConverter.

En raison de la complexiteit du numéro ISBN, c'est en effet plus souvent stocké en tant que String afin que le développeur n'a pas besoin de vous soucier des motifs valables. Que ce soit bon ou mauvais est une question que vous avez à vous poser et votre équipe.

Autres conseils

ISBN a 13 chiffres (voir wiki ). J'utiliser une classe qui vérifie la validité de String donné. Quelque chose comme:

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
  }
}

Ceci, bien sûr, peut-être un peu trop. Si votre application est très simple, vous pouvez aller avec String très bien.

Modifier Les césures divise le nombre en groupes (langue, éditeur, etc.). Cependant, comme pour l'unicité du nombre, césures (ou division avec des espaces) ne joue aucun rôle.

En fait, ISBN ne sont pas 10 chiffres, mais 12 chiffres + un chèque ISBN FAQ Le contrôle peut être un X

La méthode de détermination du chiffre de contrôle pour l'ISBN est le module 11 avec les facteurs de pondération 10 à 1. Le chiffre romain X est utilisé en lieu et place de 10 dix où se produirait un chiffre de contrôle.

Si vous stockez des informations qu'un utilisateur a tapé alors vous devez inclure le chiffre de contrôle et donc ce doit être une chaîne.

Si vous stockez l'ISBN réelle vous pouvez alors ignorer la vérification que vous pouvez le calculer. Toutefois, si l'utilisation des nouveaux 12 chiffres les chiffres sont supérieurs à une attente longue peut, si les vieux 10 chiffres, alors il pourrait se tenir à une longue mais vous auriez à penser à éventuellement ajouter principaux 0s retour. Ainsi, dans ce cas, je tiendrais dans une chaîne supprimant toutes les données non numériques par exemple des traits d'union.

recherche également à cette FAQ, il y a une raison possible de stocker la ISBn découpée pour permettre la recherche par les parties.

Les cinq parties d'un ISBN sont les suivantes:
1. L'ISBN-13 actuel sera préfixé par « 978 »
2. identifiant de groupe ou pays qui identifie un groupe national ou géographique des éditeurs;
3. identifiant de l'éditeur qui identifie un éditeur particulier au sein d'un groupe;
4. identifiant de titre qui identifie un titre particulier ou édition d'un titre;
5. Vérifiez chiffres est le seul chiffre à la fin de l'ISBN qui valide l'ISBN.

et 5 n'a pas besoin d'être sauvé car il peut être calculé, mais a besoin d'être capturé par les utilisateurs à l'entrée de validation.

Cette question n'a pas vraiment rien à voir avec J2EE, mais simplement avec Java et peut-être les types de données types de données sur votre moteur de base de données.

Si vous voulez inclure les traits d'union dans une sortie, que vous avez à peu près le stocker sous forme de chaîne. Sauf si vous voulez écrire du code pour savoir où les traits d'union vont, mais les règles derrière qui sont assez compliquées, en fonction des valeurs des chiffres au début du numéro. (Si vous travaillez sur un système qui attribue ou les numéros ISBN démonte et travaille avec les pièces, peut-être que vous voulez faire. Si vous voulez juste l'utilisateur de taper dans et vous vous en souvenez, cela sonne comme trop de problèmes .)

Je suppose que si vous ne se soucient pas des traits d'union, vous pouvez utiliser une chaîne ou une longue. Pourtant, une longue serait une douleur supplémentaire dans ce que vous auriez à savoir quand pour afficher des zéros à gauche.

Réponse courte: Je ne vois aucun avantage à le stocker sous forme d'un numéro. Utilisez une chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top