【发布时间】:2022-01-25 11:58:18
【问题描述】:
代码说明
数据库连接
我尝试将 Java 对象存储在本地数据库而不使用外部数据库。 为此,我通过 Hibernate 将 JDBC 与 H2 一起使用:
/**
* @param connection the connection to set
*/
public static void setConnectionHibernate() {
Properties connectionProps = new Properties();
connectionProps.put("user", "sa");
try {
Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
url = "jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MODE=MySQL;";
}
查询
我使用此代码将 PROCEDURE 存储在字符串中:
static final String CREATE_PROCEDURE_INITPSEUDOS = "CREATE OR REPLACE PROCEDURE init_pseudos (MaxPseudo INT) BEGIN WHILE MaxPseudo >= 0 DO"
+
" INSERT INTO Pseudos (indexPseudo)" +
" VALUES (MaxPseudo);" +
" SET MaxPseudo = MaxPseudo - 1;" +
" END WHILE;" +
" END init_pseudos;";
查询执行
我用这段代码执行语句:
public static void initBaseDonneePseudos() {
try (Connection connection = DriverManager.getConnection(url, connectionProps);
Statement stmt = connection.createStatement()) {
stmt.execute(RequetesSQL.CREATE_TABLE_PSEUDOS);
stmt.execute(RequetesSQL.CREATE_PROCEDURE_INITPSEUDOS);
stmt.execute(RequetesSQL.CREATE_FUNCTION_RECUPEREPSEUDO);
stmt.execute(RequetesSQL.INIT_TABLE_PSEUDOS);
} catch (SQLException e) {
e.printStackTrace();
}
}
问题
测试
我执行这个测试来测试语句:
@Nested
class BaseDonneeInteractionTest {
@BeforeEach
public void setUp() {
BaseDonnee.setConnectionHibernate();
}
@Test
void testInitBaseDonnee() {
assertDoesNotThrow(() -> BaseDonnee.initBaseDonneePseudos());
}
}
错误
但是我得到这个错误
我没有找到查询的问题,有人有解决这个问题的方法吗?
【问题讨论】:
-
您应该将错误消息作为文本而不是图像发布。
标签: java stored-procedures jdbc h2