java数据库主键

Java数据库中主键是一种特殊的唯一标识符,用于确保表中的每一行数据都具有唯一的标识。

Java数据库主键

在Java中,数据库主键是一个用于唯一标识表中每一行数据的字段或一组字段,主键的值在整个表中必须是唯一的,不能有重复,主键的作用是确保数据的完整性和一致性。

java数据库主键

1、主键的类型

主键可以是以下几种类型:

整数类型(如INT、BIGINT)

字符串类型(如VARCHAR、CHAR)

组合类型(如UUID)

2、创建表时设置主键

java数据库主键

在创建表时,可以使用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():获取插入记录后生成的主键值。

java数据库主键

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

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希的头像未希新媒体运营
上一篇 2024-05-21 17:43
下一篇 2024-05-21 17:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入