如何用java中 取到作为数据库主键的值,这个主键是通过序列的个变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用java中 取到作为数据库主键的值,这个主键是通过序列的个变量相关的知识,希望对你有一定的参考价值。

在oracle数据库中建立了一个表BM,systemid作为此表的主键,并建立一个序列systemid,然后现在要建立一个web工程,需要再这个web里 每新增一个数据,就要在数据库里对应的systemid中增加1编号。可我是个新手,不知道如何用java语言取到systemid这个值(systemid这个值是序列systemid中获得的)

Oracle的啊 给你个例子,你自己改下表还有insert语句

public int save(User user) throws SQLException // 插入数据
int id = 0;// 返回用户ID
String sql = "insert into regist_1 values(regist_1seq.nextval,?,?,?,?,?,?)";
String sql2 = "select regist_1seq.currval from dual";
//sql2就是获取序列自增的值,你把regist_1seq换成你自己的

Connection con = ConnectionUtils.openConnection();
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, user.getUsername());
stmt.setString(2, user.getName());
stmt.setString(3, user.getPassword());
stmt.setInt(4, user.getAge());
stmt.setString(5, user.getSex());
stmt.setString(6, user.getTel());
stmt.executeUpdate();
stmt = con.prepareStatement(sql2);
ResultSet rs = stmt.executeQuery();
if (rs.next())
id = rs.getInt(1);
System.out.println("save id:" + id + "...");

ConnectionUtils.closeResult(rs);
ConnectionUtils.closeStatement(stmt);
ConnectionUtils.closeConnection(con);
return id;

不懂可以追问.
参考技术A oracle中有sequence ,可以在数据库中执行create sequence seq_systemid start with 1 increment by 1; 这样在程序中你就可以实现自增长了,如在程序中执行sqi语句:insert into bm values(seq_systemid.nextval,...........);

如何处理 Entity Framework 中缺少主键的问题?

【中文标题】如何处理 Entity Framework 中缺少主键的问题?【英文标题】:How do I deal with a lack of a primary key in Entity Framework? 【发布时间】:2012-01-25 00:05:27 【问题描述】:

使用 Entity Framework,每当我在 Visual Studio 中“从数据库更新模型”时,创建的模型就无法使用。

问题在于 EF 不能很好地处理没有主键的表。它将它们视为一个视图,从而阻止您使用 EF 编辑表。您可以通过将模型(edmx 文件)作为 XML 文件打开并对 EntitySet 定义进行一些更改来覆盖此行为。一遍又一遍地这样做很烦人。除了添加主键或在每次更新后修改 edmx 文件之外,有没有人找到更永久的解决方法?

顺便说一句,我使用的是唯一键,但它分布在两列中。如果 EF 可以处理这个问题就好了,但从 EF 4.2 开始就不行了。

【问题讨论】:

【参考方案1】:

我不明白-您使用的是“唯一键”(我假设您的意思是唯一索引或唯一约束),因为键有两列?您可以创建具有多列的主键。我不确定为什么 EF 会以不同于单列主键的方式处理两列键,但这里有一个多列主键的简单示例:

CREATE TABLE dbo.foobar
(
    fooID INT,
    barID INT,
    PRIMARY KEY (fooID, barID)
);

当然还有其他语法可以让你事后创建约束,你也应该明确地命名你的约束,但只是想展示一个简单的例子。

【讨论】:

啊哈。我之前拥有的是一个唯一的非聚集密钥。如您所述,我删除了它并添加了一个两列主键。 EF 导入这个就好了,这就解决了问题。顺便说一句,我刚刚发现可以通过在SQL Management Studio中选择每一列来添加多列主键,然后单击“添加主键”。很整洁,很有趣,我以前没有发现过。【参考方案2】:

顺便说一句,我使用的是唯一键,但它分布在两列中。如果 EF 可以处理这个问题就好了,但是从 EF 4.2 开始就不行了。

Yes it does ;)

【讨论】:

使用 Code First 方法会更好吗?我问的原因是我上面描述的场景(数据库优先)是在 SQL 中定义的两列唯一键,它不会自动移植到 EF。 我遇到了同样的问题。我必须进去并添加一个主键列,并使两个原始列成为唯一索引。然后,只有这样 EF 才能正确导入表。

以上是关于如何用java中 取到作为数据库主键的值,这个主键是通过序列的个变量的主要内容,如果未能解决你的问题,请参考以下文章

java中如何获取我在ACCESS数据库中查询到的某个字段所对应的主键的值?

如何用注解简化SSH框架

在将数据从文件插入表时,如何用 NULL 替换 NA 值?

SQL java获取分配给自动递增主键的值[重复]

很菜的数据库问题,主键的值允许重复吗?外键啥作用?

如何用该表唯一的不同整数替换 Django 的主键