SQL Server 自 2008 版起引入了uniqueidentifier字段,它存储的是一个 UUID, 或者叫 GUID,内部存储为 16 个字节。SQL Server 可用两个函数来生成uniqueidentifier, 分别是NEWID()和NEWSEQUENTIALID(), 后者只能用作字段的默认值。Java 也有一个 UUID 工具类java.uti.UUID,UUID.randomUUID().toString()生成一个随机的 UUID 字符串,在java.util.UUID也是用两个long字段表示内部状态。
SQL Server 的uniqueidentifier类型字段表明了内部如何存储,在我们操作它时,它的外在表现形式都是一个固定格式 `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` 的字符串,不区分大小写的。
本文所使用的 SQL Server 是 2017 版,通过 Docker 来启动的docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d microsoft/mssql-server-linux:2017-latest
然后我们创建一个带有uniqueidentifier类型字段的表 Read More- 标准 SQL 都提供了下面这种方式一条 INSERT INTO 语句插入多条记录
VALUES 之后用括号列出每一条记录。但是在 Java 中想把上面的语句转换成 PreparedStatement 来插入多条记录时就有些问题。要么写成INSERT INTO Customers(Id, Name, Age) VALUES (1, 'Name1', 21.5), (2, 'Name2', 32.3)
INSERT INTO Customers(Id, Name, Age) VALUES(?, ?, ?), (?, ?, ?), (?, ?, ?) ....
我们不知道 VALUES 后应该列多少个问号,而且 JDBC 对参数的个数是有限制的,最多 2000 个参数。如果根据字段个数来算一次添加多少条记录,那么这条 SQL 语句也是动态的,不能很好的作为 PreparedStatement 进行预编译。以一个表三个字段为例,2000 个参数下一次性最多能插入记录数 666 条,也可能由于输入是 666 条记录的任意数量,所以生成的语句非静态的。
这种方式与每次手动拼凑一个完全静态的 INSERT INTO 语句应该不会有太多的差别。
如果只是写成INSERT INTO Customers(Id, Name, Age) VALUES(?, ?, ?)
然后试图进行下面的操作 Read More