追加時に自動的に流れ番号IDを生成します。
4872 ワード
プロジェクトでは、あるレコードを追加する際、重複してはいけない値を定義するために、自動的にストリーム番号を生成する方式でこの値を定義します。必要に応じて、定義の方法も多様であり、例えば、日付に3ビットのストリーム番号(例:201801151001)を加算する。このため、2つの流れ番号を生成する方法が分かった。
一、Javaから流れ番号を生成する
生成ストリーム番号フォーマットはyyyMMddxxxxです。
二、SQLから流れ番号を生成する
同様に、ストリーム番号を生成するフォーマットをyyyMMddxxxxとする。
①例ではdate_format(now()'%Y%m%d')は、バックグラウンドサービス論理層で現在の時間をパラメータとして取得して入ることができます。
②concat関数、括弧内の文字列をつづり合わせる 【例:呼び出しconcat(「abc」、「d」、「ef」、「g」)関数はabcdefgに戻る】
③lpad関数は、第三のパラメータで第一のパラメータの左側に塗りつぶします。パラメータの総長が第二の数値に達するまで 【例:呼び出し lpad('sd',5'*')関数は***sdに戻ります。
④substringには三つの用法があります。【substring(‘abcdefg’,3)>>defg // substring('abcdefg',2,3)->bcd // 'abc defg'.substring(2,4)->cd】
⑤この方法は後三桁が999以下のデータに対してのみ使用され、一定の制限があります。
転載先:https://www.cnblogs.com/smileToSunshine/p/8288417.html
一、Javaから流れ番号を生成する
生成ストリーム番号フォーマットはyyyMMddxxxxです。
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PrimaryGenerater {
private static final String SERIAL_NUMBER = "XXXX"; //
private static PrimaryGenerater primaryGenerater = null;
private PrimaryGenerater() {
}
/**
* PrimaryGenerater
*
* @return
*/
public static PrimaryGenerater getInstance() {
if (primaryGenerater == null) {
synchronized (PrimaryGenerater.class) {
if (primaryGenerater == null) {
primaryGenerater = new PrimaryGenerater();
}
}
}
return primaryGenerater;
}
/**
*
*/
public synchronized String generaterNextNumber(String sno) {
String id = null;
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
if (sno == null) {
id = formatter.format(date) + "0001";
} else {
int count = SERIAL_NUMBER.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
sb.append("0");
}
DecimalFormat df = new DecimalFormat("0000");
id = formatter.format(date)
+ df.format(1 + Integer.parseInt(sno.substring(8, 12)));
}
return id;
}
}
二、SQLから流れ番号を生成する
同様に、ストリーム番号を生成するフォーマットをyyyMMddxxxxとする。
SELECT
IF (
max(a.st_no) IS NULL,
CONCAT(
date_format(now(),'%Y%m%d'),
LPAD('1', '11' - LENGTH(date_format(now(),'%Y%m%d'), '0')
),
CONCAT(
LEFT (max(a.st_no), 8),
LPAD(
CONVERT (
SUBSTRING(max(a.st_no), 9),
SIGNED
) + 1,
LENGTH(max(a.st_no)) - 8,
'0'
)
)
) AS st_no
FROM
Student a
WHERE
a.st_no LIKE concat(
date_format(now(),'%Y%m%d'),'%') AND LENGTH(a.st_no) = '11'
注意:①例ではdate_format(now()'%Y%m%d')は、バックグラウンドサービス論理層で現在の時間をパラメータとして取得して入ることができます。
②concat関数、括弧内の文字列をつづり合わせる 【例:呼び出しconcat(「abc」、「d」、「ef」、「g」)関数はabcdefgに戻る】
③lpad関数は、第三のパラメータで第一のパラメータの左側に塗りつぶします。パラメータの総長が第二の数値に達するまで 【例:呼び出し lpad('sd',5'*')関数は***sdに戻ります。
④substringには三つの用法があります。【substring(‘abcdefg’,3)>>defg // substring('abcdefg',2,3)->bcd // 'abc defg'.substring(2,4)->cd】
⑤この方法は後三桁が999以下のデータに対してのみ使用され、一定の制限があります。
転載先:https://www.cnblogs.com/smileToSunshine/p/8288417.html