用java 写向两个表同时插入数据,第二个表的一个字段是取第一个表的ID值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java 写向两个表同时插入数据,第二个表的一个字段是取第一个表的ID值相关的知识,希望对你有一定的参考价值。
刚开始我是这样写的
String sql = "INSERT INTO person ( name, pass ) VALUES ( 'balabala', '123456' )"; // 执行SQL语句 stmt = conn.createStatement(); // stmt=conn.prepareStatement(sql);stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()) int id = rs.getInt(1); System.out.println ("生成记录的key为 :" + id); System.out.println("插入数据成功");
这样就可以没问题,但是我改成下面就出现问题了
String sql = "insert into person (name, pass) values (?, ?)";conn = DB.getConnection();pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);ResultSet rs = pstmt.getGeneratedKeys(); pstmt.setString(1, person.getName());pstmt.setString(2, person.getPass());pstmt.executeUpdate();
编辑后出现问题:Exception in thread "main" java.lang.AbstractMethodError: com.microsoft.jdbc.sqlserver.SQLServerConnection.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement
换了sqljdbc_2.0、sqljdbc_3都没用
conn = DB.getConnection();
pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, person.getName());
pstmt.setString(2, person.getPass());
pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();//放在后面 参考技术B pc_id,screen_id哪个优先?以pc_id优先为例:
oracle用decode函数,sqlserver可以用case...when,给你个oracle的例子
create procedure add_table
is
begin
insert into wip_led_opration(operation_id,led_pc_id,led_screen_id)
select operation_id,led_pc_id, decode(led_pc_id,null,led_screen_id,null)
-- 逻辑:第三列led_screen_id,先判断led_pc_id是否为空,为空则用led_screen_id,非空即led_pc_id存在,则led_screen_id列位置留空
from fnd_led_pc ,fnd_led_screen ,fnd_operation
where fnd_operation.status=1
and fnd_led_screen.status=1
and fnd_led_pc.status=1
-- and fnd_operation.status=fnd_led_screen.status --这个条件是多余的,两个值都=1了
and fnd_led_screen.status=fnd_led_pc.status ;
end;
/* 另外提几点建议
1. 建议给三个表加上别名
2. 多余的连接条件我注释掉了,虽然对执行计划应该没有太大影响
3. SELECT后最好标识出源表,比如fnd_operation.operation_id,这样自己看着也清楚
*/[MIMIcall]]不错的软件
如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql
【中文标题】如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql【英文标题】:If a table has columns equal to columns in a second table insert values in a third table, python - mysql 【发布时间】:2021-09-21 00:03:54 【问题描述】:我的数据库中有 3 个表:
借款人:贷款金额、利率、借款人 ID (PK) 贷方:出价金额、利率和贷方 ID (PK) Contracts:ContractID PK、金额、利率和两个外键(borrowerID、lenderID)我使用输入命令在 python 中创建了一个循环,我可以在其中插入新的贷款请求和新的投标报价。 每个插入都与mysql连接,并添加到相应的表中。
例如:
python 中的输入 --> L 1000 1.1 输出 --> 在 Borrowers 表中创建一个自动增量 PK、金额为 1000、利率为 1.1% 的插入
我需要在循环中创建另一个函数,其中对于每个新的请求/报价,如果报价等于请求 (Borrowers.Amount, BorrowersInterestRate = Lenders.Amount, Lenders.InterestRate
),它将被创建一个插入具有相同金额和利率的合同表。
【问题讨论】:
那么你的问题是什么?你尝试创作吗?请先显示您的代码。如果对您不起作用,请描述问题 【参考方案1】:这仅在您使用 mysql python 连接器时有效。据我所知,这是使用 python 使用 mysql 的唯一方法,但我可能错了。
搜索请求是否与报价匹配:
def search_for_request(amount, interest_rate):
# assuming that columns containing amount and interest rate are named as such
database.cursor.execute("select amount_of_the_bid, interest_rate from lenders")
result = database.cursor.fetchall()
for amount_and_interest in result:
# not sure if this step is necessary
amount_and_interest = list(amount_and_interest)
if amount_and_interst[0] == amount and amount_and_interst[1] == interest_rate:
# execute query for entering the contract info in contract table
database.commit()
搜索报价是否匹配请求:
def search_for_offer(amount, interest_rate):
# assuming that columns containing amount and interest rate are named as such
database.cursor.execute("select amount_of_the_bid, interest_rate from borrowers")
result = database.cursor.fetchall()
for amount_and_interest in result:
# not sure if this step is necessary
amount_and_interest = list(amount_and_interest)
if amount_and_interest[0] == amount and amount_and_interest[1] == interest_rate:
# execute query for entering the contract info in contract table
database.commit()
【讨论】:
这几乎是我一直在寻找的答案,但多亏了你,我明白了如何解决我的要求!以上是关于用java 写向两个表同时插入数据,第二个表的一个字段是取第一个表的ID值的主要内容,如果未能解决你的问题,请参考以下文章
如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql