4

サーブレットとjspsを使用してWebアプリを試していますが、クラス内および休止状態のマッピングでアイテムのISBN番号をモデル化する必要があります。isbn番号のタイプはどちらにする必要がありますか?LongまたはString?私はそれらのいずれかを使用する多くのチュートリアルに出くわしました..isbnはおそらく10桁の識別子です..時々あなたは長いことができない0-85131-041-9のような数字に出くわします..いくつかの例はハイフンなしの数字を使用します..

それで、どちらのタイプにする必要がありますか?助言がありますか?

ありがとう

マーク

4

4 に答える 4

3

ISBNは13桁です(wikiを参照)。与えられたの有効性をチェックするクラスを使用しますString。何かのようなもの:

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

もちろん、これは少し多すぎるかもしれません。あなたのアプリが本当にシンプルなら、あなたはうまくいくかもしれませんString

編集ハイフンは、番号をグループ(言語、発行元など)に分割します。ただし、数値の一意性については、ハイフン(またはスペースによる除算)は役割を果たしません。

于 2011-06-13T18:35:36.540 に答える
3

実際には、ISBNは10桁ではなく、12桁+小切手ISBNFAQ小切手はXにすることができます

ISBNのチェックディジットを決定する方法は、重み係数が10から1のモジュラス11です。10の代わりにローマ数字のXが使用され、10がチェックディジットとして使用されます。

ユーザーが入力した情報を保存する場合は、チェックディジットを含める必要があるため、これは文字列である必要があります。

実際のISBNを保存している場合は、計算できるため、チェックを無視できます。ただし、新しい12桁を使用する場合、数字はlongが保持できるよりも大きく、古い10桁を使用すると、longで保持される可能性がありますが、先頭に0を追加することを忘れないでください。したがって、この場合、ハイフンなどのすべての非数値データを削除する文字列に保持します。

また、そのFAQを見ると、パーツで検索できるようにISBnを分割して保存する理由が考えられます。

ISBNの5つの部分は次のとおりです
。1。現在のISBN-13には「978」という接頭辞が付きます
。2。出版社の国内または地理的なグループを識別するグループまたは国の識別子。
3.グループ内の特定の発行元を識別する発行元ID。
4.特定のタイトルまたはタイトルのエディションを識別するタイトル識別子。
5.チェックディジットは、ISBNを検証するISBNの最後の1桁です。

5は計算できるため保存する必要はありませんが、エントリを検証するためにユーザーから取得する必要があります。

于 2011-06-13T18:39:28.990 に答える
2

この質問は、実際にはJ2EEとは関係ありませんが、単にJavaデータ型とデータベースエンジンのデータ型とは関係があります。

出力にハイフンを含めたい場合は、ほとんどの場合、文字列として保存する必要があります。ハイフンがどこに行くのかを理解するためのコードを書きたい場合を除いて、その背後にあるルールは、数字の先頭の数字の値によってはかなり複雑です。(ISBNを割り当てるシステム、またはISBNを分解してピースを処理するシステムで作業している場合は、これを実行することをお勧めします。ユーザーに入力して覚えてもらいたい場合は、問題が多すぎるように思われます。 。)

ハイフンを気にしないのであれば、Stringまたはlongを使用できます。それでも、先行ゼロをいつ表示するかを理解する必要があるという点で、長いことは余分な苦痛になります。

簡単な答え:数値として保存することに利点はありません。文字列を使用します。

于 2011-06-13T18:36:51.650 に答える
0

それをプロパティに格納しLong、フォーマッター/パーサー(基本的にはコンバーター)を使用します。Long表示する場合、コンバーターはプロパティを適切な場所にハイフンを使用した人間の表現に変換する必要があります。検証/永続化する場合、コンバーターは送信された値からすべてのハイフンを削除し、Longプロパティに配置する必要があります。

Date基本的に、これは、の助けを借りて人間の表現でフォーマット/解析するフィールドに使用するのと同じ考え方ですSimpleDateFormat。唯一の違いは、ISBNフォーマッター/パーサーが標準のJavaSEAPIでは使用できないことです。自分で作成するか、サードパーティのものを採用する必要があります(ただし、既存のものは思い浮かびません)。最後に、このコンバーターは、JSPタグ(JSTLのような<fmt:formatDate>)またはEL関数によって呼び出されるスタンドアロンのJavaクラスとして、またはJSFを使用しているときに@FacesConverterクラスとして使用できます。

ISBN番号は複雑であるため、これは実際に多くの場合、として保存されるStringため、開発者は有効なパターンについて心配する必要はありません。それが良いか悪いかは、あなた自身とあなたのチームに尋ねなければならない質問です。

于 2011-06-13T18:33:29.913 に答える