日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文介紹了對(duì)于UUID類(lèi)型列,在插入新行時(shí)返回H2數(shù)據(jù)庫(kù)中默認(rèn)生成的主鍵值的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

使用UUID數(shù)據(jù)type作為表的主鍵,并在插入新記錄時(shí)要求h2generate each UUID value by default,如何獲取新生成的UUID值?

我在Java應(yīng)用程序中使用純JDBC 4.x,如果這對(duì)解決方案有幫助的話(huà)。


I KnowSCOPE_IDENTITY函數(shù)為在標(biāo)記為IDENTITY的列上為自動(dòng)遞增的序列號(hào)生成的鍵返回long。但我使用UUID而不是遞增數(shù)字作為我的主鍵列類(lèi)型。

推薦答案

Statement::getGeneratedKeys

如注釋和correct Answer by YCF_L所示,解決方案在于標(biāo)準(zhǔn)的JDBC:CallStatement::getGeneratedKeys。這將生成該語(yǔ)句的上一次使用中默認(rèn)生成的鍵值的ResultSet。它與PreparedStatement配合使用,并將自動(dòng)生成的UUID值作為主鍵。

Statement.RETURN_GENERATED_KEYS

問(wèn)題是,在默認(rèn)情況下,而不是獲取的是生成的密鑰。您必須通過(guò)向Connection::prepareStatement調(diào)用傳遞額外參數(shù)來(lái)激活此功能。額外的參數(shù)是int,使用Statement接口上定義的常量Statement.RETURN_GENERATED_KEYS。在現(xiàn)代Java中,這很可能被定義為Enum,但JDBC可以追溯到Java最早的日子,所以參數(shù)是一個(gè)簡(jiǎn)單的int

示例應(yīng)用程序

這是一個(gè)完整的示例應(yīng)用程序,在一個(gè)文件中。

package work.basil.example.h2.auto_uuid;

import java.sql.*;
import java.util.UUID;

public class App {
    public static void main ( String[] args ) {
        App app = new App();
        app.doIt();
    }

    private void doIt ( ) {
        
        try {
            Class.forName( "org.h2.Driver" );
        } catch ( ClassNotFoundException e ) {
            e.printStackTrace();
        }

        try (
                Connection conn = DriverManager.getConnection( "jdbc:h2:mem:auto_uuid_example_db;DB_CLOSE_DELAY=-1" ) ; // Set `DB_CLOSE_DELAY` to `-1` to keep in-memory database in existence after connection closes.
                Statement stmt = conn.createStatement() ;
        ) {
            String sql = "CREATE TABLE person_ ( 
" +
                    "  pkey_ UUID NOT NULL DEFAULT RANDOM_UUID() PRIMARY KEY , 
" +
                    "  name_ VARCHAR NOT NULL 
" +
                    ");";
            stmt.execute( sql );

            // Insert row.
            sql = "INSERT INTO person_ ( name_ ) 
";
            sql += "VALUES ( ? ) 
";
            sql += ";";
            try (
                    PreparedStatement pstmt = conn.prepareStatement( sql , Statement.RETURN_GENERATED_KEYS ) ;
            ) {

                pstmt.setString( 1 , "Jesse Johnson" );
                pstmt.executeUpdate();

                ResultSet rs = pstmt.getGeneratedKeys();
                System.out.println( "INFO - Reporting generated keys." );
                while ( rs.next() ) {
                    UUID uuid = rs.getObject( 1 , UUID.class );
                    System.out.println( "generated keys: " + uuid );
                }

            }

            // Dump all rows.
            System.out.println( "INFO - Reporting all rows in table `person_`." );
            sql = "SELECT * FROM person_";
            try ( ResultSet rs = stmt.executeQuery( sql ) ; ) {
                while ( rs.next() ) {
                    UUID pkey = rs.getObject( "pkey_" , UUID.class );
                    String name = rs.getString( "name_" );
                    System.out.println( "Person: " + pkey + " | " + name );
                }
            }

        } catch ( SQLException e ) {
            e.printStackTrace();
        }


    }
}

運(yùn)行時(shí)。

信息報(bào)告生成的密鑰。

生成密鑰:9c6ce984-151b-4e64-8334-d96e17be9525

INFO-報(bào)告表person_中的所有行。

聯(lián)系人:9c6ce984-151b-4e64-8334-d96e17be9525|Jesse Johnson

如果您希望一次插入多行,而不是一行,請(qǐng)使用批處理。請(qǐng)參閱:Java: Insert multiple rows into MySQL with PreparedStatement

如果您有多個(gè)自動(dòng)生成的列,而不僅僅是此處看到的單個(gè)UUID列,請(qǐng)參閱other Answer by YCF_L。

這篇關(guān)于對(duì)于UUID類(lèi)型列,在插入新行時(shí)返回H2數(shù)據(jù)庫(kù)中默認(rèn)生成的主鍵值的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,

分享到:
標(biāo)簽:主鍵 插入 數(shù)據(jù)庫(kù)中 生成 行時(shí) 返回 默認(rèn)
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定