在Java中,数据库主键是一个用于唯一标识表中每一行数据的字段或一组字段,主键的值在整个表中必须是唯一的,不能有重复,主键的作用是确保数据的完整性和一致性。
1、主键的类型
主键可以是以下几种类型:
整数类型(如INT、BIGINT)
字符串类型(如VARCHAR、CHAR)
组合类型(如UUID)
2、创建表时设置主键
在创建表时,可以使用PRIMARY KEY
关键字来设置主键,创建一个名为students
的表,其中id
字段为主键:
CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50), age INT, class VARCHAR(50) );
3、修改表结构设置主键
如果已经创建了表,可以使用ALTER TABLE
语句来修改表结构,添加主键,为students
表的name
字段添加主键:
ALTER TABLE students ADD CONSTRAINT pk_students_name PRIMARY KEY (name);
4、Java代码操作主键
在Java中,可以使用JDBC(Java Database Connectivity)来操作数据库,以下是一些常用的操作主键的方法:
getGeneratedKeys()
:获取插入记录后生成的主键值。
setAutoCommit(false)
:关闭自动提交事务。
commit()
:提交事务。
rollback()
:回滚事务。
示例代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "password"; String sql = "INSERT INTO students (name, age, class) VALUES (?, ?, ?)"; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, user, password); conn.setAutoCommit(false); // 关闭自动提交事务 PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, "张三"); pstmt.setInt(2, 18); pstmt.setString(3, "计算机一班"); int affectedRows = pstmt.executeUpdate(); // 执行插入操作,返回受影响的行数 if (affectedRows > 0) { // 如果插入成功,获取生成的主键值 ResultSet generatedKeys = pstmt.getGeneratedKeys(); while (generatedKeys.next()) { System.out.println("生成的主键值为:" + generatedKeys.getLong(1)); } } else { System.out.println("插入失败"); } conn.commit(); // 提交事务 pstmt.close(); conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); try { conn.rollback(); // 发生异常,回滚事务 } catch (SQLException ex) { ex.printStackTrace(); } } finally { } // 确保资源释放,无论是否发生异常都会执行到这里来关闭资源,注意finally块的位置不能太靠前,否则会先执行finally块再抛出异常,因为如果在try块中发生了异常,那么catch块就不会被执行到,而finally块一定会被执行到,所以为了保证资源能够被正确释放,需要将finally块放在最后面。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/643175.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复