一、为什么需要获取自动生成的主键呢?
-------------------------------------------------案例:注册操作之后,需要去完善个人信息的操作.
1):注册界面.---->提交注册页面.
2):注册操作之后,进入完善个人信息界面.
3):填写个人的其他信息----->保存信息.
单据和单据明细
二、如何在JDBC中保存数据的时候获取自动生成的主键呢?
----------------------------------------------------------------------Statement:
int executeUpdate(String sql,int autoGeneratedKeys):执行SQL参数:autoGeneratedKeys,是否需要返回自动生成的主键.常量值:Statement.RETURN_GENERATED_KEYS
ResultSet getGeneratedKeys():获取自动生成的主键
代码演示:
public class GetKeyDemo {
@Test
public void StatementGetKey() {
Connection conn = null;
Statement st = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "rootroot");
String sql = "insert into t_student (name,age) values('a',22)";
st = conn.createStatement();
st.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS); //设置需要返回自动生成的主键
ResultSet rs = st.getGeneratedKeys(); //获取返回的含主键的结果集
while(rs.next()){
int id = rs.getInt(1);
System.out.println(id);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5.释放资源
try {
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
代码运行结果:
PreparedStatement:
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) :创建PreparedStatement对象,并且指定是否需要返回生成的主键. 参数的常量值:Statement.RETURN_GENERATED_KEYS
代码演示:
public class GetKeyDemo {
@Test
public void PreparedStatementGetKey() {
Connection conn = null;
PreparedStatement ps = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "rootroot");
String sql = "insert into t_student (name,age) values('a',?)";
ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); //设置需要返回自动生成的
ps.setInt(1, 23);
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys(); //获取返回的含主键的结果集
while(rs.next()){
int id = rs.getInt(1);
System.out.println(id);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 5.释放资源
try {
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
代码运行结果:
三、大数据类型
TEXT系列(大文本系列):其实就是VARCHAR的增强版。
TINYTEXT | 255个字节 |
TEXT | 65535字节 |
MEDIUMTEXT | 16M |
LONGTEXT | 4G |
存储一本书的内容,此时考虑使用TEXT系列.TEXT系列对应Java中的String类型,仅仅只需要把VARCHAR改成TEXT系列即可,Java代码不需要改动。
BLOB系列(大二进制系列):其实就是BINARY的增强版。
TINYBLOB | 255个字节 |
BLOB | 65535字节 |
MEDIUMBLOB | 16M |
LONGBLOB | 4G |
二进制类型,主要用来存储图像,音频,视频等二级制数据,一般的,在开发中我们都不会把二进制数据保存到数据库中,而是把二进制文件的保存路径存储在数据库中,再通过路径去找到文件即可。