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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Java

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

SQL

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

Webサイト

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

Q&A

解決済

3回答

3956閲覧

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

nekomura

総合スコア132

Java

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

SQL

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

Webサイト

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

0グッド

0クリップ

投稿2016/04/12 07:57

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

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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

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

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

投稿2016/04/12 08:07

tesopgmh

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/04/12 08:18

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

2016/04/12 09:04

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

0

ベストアンサー

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

JAVA

1long ser = 0; 2

JAVA

1long ser = 99; 2 3```に変更するだけです 4 5データがなければ991を足して100になりますし 6データがあればそのMAX値に1を足して次の数になります 7 8初期値100をわかりやすくしたいなら 9先ほどのところを変更するのではなく 10```JAVA 11if (val != null) { 12 ser = Long.parseLong(val); 13} 14ser += 1; 15 16```ここを 17```JAVA 18if (val != null) { 19 // nullでなければ取得した値に1を足す 20 ser = Long.parseLong(val) + 1; 21}else{ 22 // nullの場合(データなし=最初)は100とする 23 ser = 100; 24} 25 26```とすればよいです

投稿2016/04/12 08:18

kutsulog

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/04/12 09:03

kutsulog様 ありがとうございます! 一つ目のご回答で、無事にうまく100~からの採番が可能になり、感謝です! また、サンプルコードに、別回答も頂きとてもためになります。ありがとうございます。 勉強ついでに早速下記のjavaのコードも試してみました。 ただ、 ser = 100; の箇所で文法エラーが出てしまいました。 可能であれば、こちらの解決方法もお教えいただければ幸いです。 よろしくお願いいたします。
kutsulog

2016/04/12 10:14

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

2016/04/13 02:39

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

2016/04/13 06:58

何も出力されない状態というのがわからないのですが 関数の処理を終えた時点で 引数で渡したEntityクラスのインスタンスに record_idがセットされていないということでしょうか? それでしたら途中でreturnしているかexceptionが発生しているでしょうから デバッガでステップ実行してみてはいかがでしょうか?
guest

0

long ser = 0;

long ser = 99;

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

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

投稿2016/04/12 08:19

suzukis

総合スコア1449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/04/12 08:59

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

2016/04/12 10:38

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問