質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • Java

    14126questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL

    2480questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Webサイト

    1102questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

WEB登録システム「100」から採番したい  SQL?

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,070

nekomura

score 124

よろしくお願いいたします。

Web上で稼動する登録システムを作っています。
下記のメソッドは、
「新規登録したとき」だけ、新しいレコードIDを割り当ててい句というものです。

たとえば、データが0であった場合(登録件数0)であれば、「1」番からとなり、
2,3,4…と一つずつ増えていく形で採番していきます。

これを、「1」からでなく「100」から採番していくためにはどのようなコードを書き足せば
(または変更)すればよいか、有職者の方々、ご教示をお願いいたします。

/**
     * レコードIDの発行
     * 新規データのときだけ実行します。
     *
     * @param entity
     */
    public static void issueRecordNo(Entity entity) {
        // パラメータ不良か新規でないとき抜ける
        if ((entity == null) || (entity.getId() != null)) {

            return;
        }
        // 画面アクセスでなく、record_id 設定済みなら抜けます
        if ((!EntityHelper.isUIAccess()) && (entity.getValue("record_id") != null)) {

            return;
        }

        // ser の Max 取得
        long ser = 0;
        String val = null;

        EntityManager em = ServiceLocator.getInstance().getEntityManager();
        Query q = Query.newQuery(
            "select max(record_id) from hoge.t_anken "
            );

   SearchResult<Object[]> sres = em.search(q);
        if (sres != null) {
            Object[] e = (Object[])sres.getFirst();
            // Max だと該当なしは null が戻る
            if (e[0] != null) {
                val = (String)e[0];
            }
        }
        if (val != null) {
            ser = Long.parseLong(val);
        }
        ser += 1;
        val = String.valueOf(ser);

        entity.setValue("record_id", val);
    }
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+5

DBにMYSQLをお使いでしたら、AUTO_INCRIMENTを100からにすれば100から採番されていきますよ

http://www.dbonline.jp/mysql/table/index7.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/12 17:18

    tesopgmn様

    早々のご回答、とても助かります。
    ありがとうございます。

    情報不足で申し訳ありません、DBはSQLserverです。
    ご回答をヒントに試行錯誤してみますが、可能であればサンプルコードなどいただけると
    尚ありがたいです。
    どうぞよろしくお願いいたします。

    キャンセル

  • 2016/04/12 17:24

    SQL Serverの場合、IDENTITY(100,1)とすれば100から自動で振ってくれます。

    https://msdn.microsoft.com/ja-jp/library/ms186775(v=sql.120).aspx

    キャンセル

  • 2016/04/12 18:04

    maisumakun様
    なるほど!ありがとうございます。
    まだまだ初心者の為、うまく調べることができていませんでした。
    とても助かります。

    キャンセル

checkベストアンサー

+2

いまのつくりをそのまま活かすなら
初期値を変更するだけなので

long ser = 0;


long ser = 99;

に変更するだけです

データがなければ99に1を足して100になりますし
データがあればそのMAX値に1を足して次の数になります

初期値100をわかりやすくしたいなら
先ほどのところを変更するのではなく

if (val != null) {
    ser = Long.parseLong(val);
}
ser += 1;

ここを

if (val != null) {
    // nullでなければ取得した値に1を足す
    ser = Long.parseLong(val) + 1;
}else{
    // nullの場合(データなし=最初)は100とする
    ser = 100;
}

とすればよいです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/12 18:03

    kutsulog様
    ありがとうございます!
    一つ目のご回答で、無事にうまく100~からの採番が可能になり、感謝です!
    また、サンプルコードに、別回答も頂きとてもためになります。ありがとうございます。

    勉強ついでに早速下記のjavaのコードも試してみました。
    ただ、
    ser = 100;
    の箇所で文法エラーが出てしまいました。
    可能であれば、こちらの解決方法もお教えいただければ幸いです。
    よろしくお願いいたします。

    キャンセル

  • 2016/04/12 19:14

    どんなエラーが出ているかみたいので
    エラーメッセージを張り付けてもらえますか?

    キャンセル

  • 2016/04/13 11:39

    kutsulog様
    返信ありがとうございます。
    コメントが遅れ申し訳ありません、よろしくお願いいたします。
    long ser = 99;
    を初めの設定に戻し、kutsulog様からご教示いただきましたjavaのコードを再度試しましたところ、レコードIDが反映されなくなってしまいました。
    (何も出力されない状態)
    今一度、こちらの方も教えていただければ幸甚です。
    よろしくお願いいたします。

    ちなみにエラーですが、私のミス(トークン)でしたようで、こちらは出なくなりました。大変失礼いたしました。

    キャンセル

  • 2016/04/13 15:58

    何も出力されない状態というのがわからないのですが
    関数の処理を終えた時点で
    引数で渡したEntityクラスのインスタンスに
    record_idがセットされていないということでしょうか?

    それでしたら途中でreturnしているかexceptionが発生しているでしょうから
    デバッガでステップ実行してみてはいかがでしょうか?

    キャンセル

+1

long ser = 0;


long ser = 99;


にすればとりあえずは100から採番されます。

が、このコードだと、処理が同時に2つ走った場合、2つのレコードに同じIDが採番される可能性があります。一般にこのような方法でIDを採番するのは好ましくありません。データベースにはたいていこのような時に使う数値を自動採番する仕組みがありますので、それ使ってください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/12 17:59

    suzukis様
    ありがとうございます。とても勉強になります。
    ご回答を元に調べてみたのですが、カラムの属性に「IDENTITY」を指定する、という認識でよろしいのでしょうか。

    キャンセル

  • 2016/04/12 19:38

    他の回答へのコメントを見るとSQL Serverということですが、ドキュメント見た感じでは多分それであってるんじゃないかと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    14126questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • SQL

    2480questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Webサイト

    1102questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。