Java “可以价值”;“文字”;与select语句组合在一个";在“;

Java “可以价值”;“文字”;与select语句组合在一个";在“;,java,sql,jdbc,insert,derby,Java,Sql,Jdbc,Insert,Derby,这是我在这里的第一篇帖子,如果有什么不合适的地方,请提前接受我的道歉。 我也是一个新手,试图学习一些Java和JDBC。我想知道是否有可能将硬编码值与SQL插入中的select语句结合起来。 我正在尝试下面的语句,它给出了一个错误“标量子查询只允许返回一行。” 提前谢谢你的建议 String sql = "INSERT INTO MEMBER_LESSONS " + " (LESSON_ID, BOOKING_DT, LESSON_DT, LESSON_TIME,

这是我在这里的第一篇帖子,如果有什么不合适的地方,请提前接受我的道歉。 我也是一个新手,试图学习一些Java和JDBC。我想知道是否有可能将硬编码值与SQL插入中的select语句结合起来。 我正在尝试下面的语句,它给出了一个错误“标量子查询只允许返回一行。” 提前谢谢你的建议

String sql = "INSERT INTO MEMBER_LESSONS "
                + " (LESSON_ID, BOOKING_DT, LESSON_DT, LESSON_TIME, LESSON_FEE, MEMBER_ID_FK,PRO_ID_FK)"
                + " VALUES (DEFAULT, '2020-01-10', '2020-01-15', '14:00', 50.0,"
                + " (SELECT ml.MEMBER_ID_FK FROM  MEMBERS m inner join MEMBER_LESSONS ml on ml.MEMBER_ID_FK = m.MEMBER_ID"
                + " where m.MEMB_NAME = ?),"
                + " (SELECT ml.PRO_ID_FK FROM GOLF_PRO gp inner join MEMBER_LESSONS ml on ml.PRO_ID_FK = gp.PRO_ID"
                + " AND gp.PRO_NAME = 'Tiger Dojen'))";

对。您的代码有点难以理解,但您可以不使用这些值。大概是这样的:

INSERT INTO MEMBER_LESSONS (BOOKING_DT, LESSON_DT, LESSON_TIME, LESSON_FEE, MEMBER_ID_FK,PRO_ID_FK)
    SELECT '2020-01-10', '2020-01-15', '14:00', 50.0, 
           (SELECT ml.MEMBER_ID_FK
            FROM MEMBERS m 
            WHERE m.MEMB_NAME = ?
           ),
           (SELECT ml.PRO_ID_FK
            FROM GOLF_PRO gp 
            WHERE gp.PRO_NAME = 'Tiger Dojen'
           )
注:

  • 我从列列表中删除了
    LESSON\u ID
    ,并从
    SELECT
    中删除了
    DEFAULT
  • 我删除了子查询中的连接;它们似乎没有必要
  • 您没有指定正在使用的数据库。有些可能需要
    from
    子句,例如
    from dual

这不是一个真正的Java问题。如果直接将SQL输入SQL客户机,则SQL将失败。这些子选择中的每一个都返回多行,而如果每个都只返回一行,那么SQL就可以正常工作

你有一些不必要的连接。你可以直接写

"INSERT INTO MEMBER_LESSONS "
                + " (LESSON_ID, BOOKING_DT, LESSON_DT, LESSON_TIME, LESSON_FEE, MEMBER_ID_FK,PRO_ID_FK)"
                + " VALUES (DEFAULT, '2020-01-10', '2020-01-15', '14:00', 50.0,"
                + " (SELECT m.MEMBER_ID FROM  MEMBERS m WHERE m.MEMB_NAME = ?),"
                + " (SELECT gp.PRO_ID FROM GOLF_PRO gp WHERE gp.PRO_NAME = 'Tiger Dojen'))";
甚至

"INSERT INTO MEMBER_LESSONS "
                + " (BOOKING_DT, LESSON_DT, LESSON_TIME, LESSON_FEE, MEMBER_ID_FK,PRO_ID_FK) "
                + "SELECT '2020-01-10', '2020-01-15', '14:00', 50.0, m.MEMBER_ID, gp.PRO_ID "
                + "FROM  MEMBERS m, GOLF_PRO gp "
                + "WHERE m.MEMB_NAME = ? AND gp.PRO_NAME = 'Tiger Dojen'";

非常感谢你的帮助。多亏了你,我现在可以开始跑步了。