簡體   English   中英

使用 H2 數據庫進行 JUNIT 測試時出現錯誤“預期標識符”

[英]Getting error “expected identifier” while using H2 Database for JUNIT Testing

我正在嘗試為我的 SpringBoot Micro 服務編寫 JUNIT 測試用例。 我使用了 H2 數據庫。 這是我的測試用例 -

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = DBSetUp.class)
@SpringBootTest(classes = ClassToBeTested.class)
public class ClassToBeTested{

@Autowired
private ClassToBeTested classToBeTested;

@Test
public void saveRandomTableTest(){
    Number number = null;
    RandomTableData randomTableData = new RandomTableData("XYZ", "XYZ WXY");
    number = classToBeTested.saveRandomTable(randomTableData );
    Assert.assertNotNull(number);
}

我試圖測試的類(ClassToBeTested.class)看起來像這樣 -

private static final String INSERT_RANDOMTABLE_SQL = "INSERT INTO RANDOM_USER.RANDOMTABLE VALUES ( RANDOM_USER.RANDOMTABLE_SEQ.nextval, ?, ?)";
private static final String[] RANDOMTABLE_PRIMARY_KEY = {"RANDOMTABLE_ID"};

public Number saveRandomTable(RandomTableData randomTableData ) {
    Number id = null;
    try{
        PreparedStatementCreator psc = new PreparedStatementCreator() {
            public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                PreparedStatement preparedStmt = connection.prepareStatement(INSERT_RANDOMTABLE_SQL, RANDOMTABLE_PRIMARY_KEY);
                prepareStatement(preparedStmt, randomTableData);
                return preparedStmt;
            }
        };
        KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(psc, keyHolder);
        id = keyHolder.getKey();
    }catch(Exception e){
        LOGGER.error("Error is "+ e.getMessage());
    }
    return id;
}

而 DBSetUp.class 看起來像這樣 -

CREATE SCHEMA IF NOT EXISTS "RANDOM_USER";
CREATE SEQUENCE IF NOT EXISTS RANDOMTABLE_SEQ START WITH 1 INCREMENT BY 1;

CREATE TABLE IF NOT EXISTS "RANDOM_USER"."RANDOMTABLE"(
RANDOMTABLE_ID  NUMBER PRIMARY KEY,
RANDOMTABLE_CODE VARCHAR2(50),
RANDOMTABLE_NAME VARCHAR2(50)
);  

但是每當我試圖在這個 JUNIT 測試用例中變得像這樣 -

ERROR : bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error 
in SQL statement "INSERT INTO RANDOM_USER.RANDOMTABLE VALUES ( RANDOM_USER.RANDOMTABLE_SEQ.nextval, 
[*] ?, ?)"; expected "identifier"; SQL statement:INSERT INTO RANDOM_USER.RANDOMTABLE VALUES ( 
RANDOM_USER.RANDOMTABLE_SEQ.nextval, ?, ?) [42001-200]

實際上,此應用程序使用 Oracle DB。 所有 SQL 采石場都可以正常工作。 僅在使用 H2 DB 進行 JUNIT 測試時出現此錯誤。 我需要添加 H2 DB 的任何特定語法嗎? 如果是,那么它也需要與 Oracle 一起使用。

你需要改變

CREATE SEQUENCE IF NOT EXISTS RANDOMTABLE_SEQ START WITH 1 INCREMENT BY 1;

CREATE SEQUENCE IF NOT EXISTS RANDOM_USER.RANDOMTABLE_SEQ START WITH 1 INCREMENT BY 1;

或在該命令之前將當前模式更改為RANDOM_USER 否則,將在默認的PUBLIC模式中創建序列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM