【问题标题】:Insert records in JDBC without using insert statement在 JDBC 中插入记录而不使用 insert 语句
【发布时间】:2014-06-17 15:49:49
【问题描述】:

我对使用 JDBC 访问 Java 数据库的概念特别陌生。我正在使用 MySql 作为我的 DBMS,我只是想知道是否有一种方法可以在不使用 MySql 的“插入”语句的情况下在我的数据库中插入记录?

【问题讨论】:

  • 为什么?请解释您为什么不想使用INSERT。只是学术上的好奇心,还是你对INSERT有某种不喜欢?
  • @Mark Rotteveel 前一种,即学术好奇心

标签: mysql jdbc sql-insert


【解决方案1】:

纯粹看 JDBC,可以在不使用 INSERT 的情况下将新行添加到数据库中。但是,不能保证实际的 JDBC 驱动程序不使用 INSERT 语句。

try (
    Connection con = DriverManager.getConnection(....);
    Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = stmt.executeQuery("SELECT col1, col2, col3 FROM someTable");
) {
    rs.moveToInsertRow();
    rs.updateString(1, "new value col1");
    rs.updateString(2, "new value col2");
    rs.updateString(3, "new value col3");
    rs.insertRow();
}

这将在结果集中插入一行,但实际实现可能会简单地生成一个INSERT 语句来实现这一点。这种方式也不是很有效(特别是如果表有大量行),如果我们没有选择(或更新)有约束的列(例如NOT NULL 或@987654326),它可能会失败@约束)。

还有许多基于 JDBC 构建的框架允许您创建和操作数据,而无需自己编写查询,但最终可能会生成 INSERT 查询。

所以:从您的角度来看,是的,当然可以将数据插入数据库,但最终您用来执行此操作的工具可能会以某种形式使用INSERT 语句。

【讨论】:

  • 可以以任何方式使用 CallableStatement 来执行所需的操作吗?
  • @VishalChugh 不是,它用于执行存储过程。因此,如果您有一个为您执行插入操作的存储过程,那么可以,但这仍然是一种“作弊”形式(因为存储过程本身将包含插入语句)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 2016-12-16
  • 2016-07-27
相关资源
最近更新 更多