# JDBC 高级
# 获取插入数据的主键
MySQL 支持通过 AUTO_INCREMENT
关键字来实现有它管理/维护主键 ID 的功能。有时你会在向 MySQL 插入一条新数据后向它“询问”该数据的主键。
prepareStatement()
方法有一个两参数重载形式,它的第二个参数形参名为 autoGeneratedKeys
。通过向该参数传入 Statement.RETURN_GENERATED_KEYS
表示启用获取主键功能。
在通过 PreparedStatement
对象执行完 execute()
/ executeUpdate()
后,调用 PreparedStatement
对象的 getGeneratedKeys()
方法,可以获得一个结果集对象。该结果集仅有一行一列,其值为新插入数据的主键 ID 值。
String sql = "xxxx";
PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstmt.setXXX(xx, xxx);
pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();
if (rs.next()) {
Long id = rs.getLong(1);
System.out.println(id);
}
Statement 对象也有类似方法,及相同处理方案。
# 设值 NULL
通过 JDBC 的 PreparedStatement 向数据库表字段设值为 NULL,不能直接使用类似 setString(xxx, nlll)
这样的方法。
JDBC 为此专门提供到了一个 setNull(xxx, Types.XXX)
方法,来为 pst 中第 N 个占位符 的位置写入一个 NULL。
其中第二个参数是该字段的数据库类型。
# 处理 Blob(选学)
BLOB 类型的字段用于存放大量的二进制数据,例如:图片、视频、音频和大型文件等。
MySQL 的 BLOB 类型细分为:
- TinyBlob,最大 255 字节。
- Blob,最大 65k。
- MediumBlob,最大 16M。
- LongBlob,最大 4G。
JDBC中,插入 Blob 类型必须使用 PrepareStatement,因为 Blob 类型的数据无法使用字符串拼接。
调用 setBlob(int index, InputStream inputStream)