当前位置: 首页 > 知识库问答 >
问题:

H2控制台错误:找不到适用于08001/0的驱动程序

邓声
2023-03-14

您好,我在H2控制台数据库中查看我的模式时遇到问题:

我正在使用spring boot:

spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MV_STORE=FALSE;MVCC=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true

这是我的登录页面:

所以我看到的是标准的控制台视图,没有我的桌子,但我的应用程序运行良好。

共有3个答案

秦建元
2023-03-14

当我遇到这个问题时,我正在学习spring boot教程。在本教程中,我的spring boot guru在应用程序中使用了以下代码。属性:

spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:someName

最后一行是不必要的,因为这些是Spring引导完成的默认配置

spring.datasource.url=jdbc:h2:mem:testdb  
spring.datasource.driverClassName=org.h2.Driver  
spring.datasource.username=sa  
spring.datasource.password=  
spring.h2.console.enabled=false

当我把它取下来时,一切都如愿了。

须景辉
2023-03-14

在我的例子中,问题是我实现了一个定制过滤器(请参见此处、此处和此处),定制的HttpServletRequestWrapper需要处理表单数据(包括驱动程序类输入)附带的H2控制台登录请求,并将其解析为参数:

public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {

private String body;

public MyHttpServletRequestWrapper(HttpServletRequest request) {
    super(request);
    this.body = IOUtils.toString(request.getReader());
    //...
}

@Override
public Enumeration<String> getParameterNames() {
    if (!parsedParams)
        parseParams();

    List<String> result = Collections.list(super.getParameterNames());
    result.addAll(parameters.keySet());

    return Collections.enumeration(result);
}

private void parseParams() {
    if (!body.isEmpty()) {
        String[] rps = body.split("&");

        for (String rp : rps) {
            String[] kv = rp.split("=");
            try {
                parameters.put(kv[0], kv.length > 1 ? new String[]{URLDecoder.decode(kv[1], "UTF-8")} : new String[]{""});
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

        parameters.setLocked(true);
        parsedParams = true;
    }
}

@Override
public Map<String, String[]> getParameterMap() {
    if (!parsedParams)
        parseParams();

    Map<String, String[]> s = super.getParameterMap();
    return Stream.concat(parameters.entrySet().stream(), s.entrySet().stream()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}

@Override
public String getParameter(String name) {
    return parameters.get(name) != null ? parameters.get(name)[0] : super.getParameter(name);
}

@Override
public String[] getParameterValues(String name) {
    String[] s = super.getParameterValues(name);
    return ArrayUtils.addAll(s, parameters.get(name));
}
}
赖诚
2023-03-14

通常测试连接工作(登录表单后的绿线),但连接不。这可能是由处理标头引起的,这可能是由过滤器或安全配置引起的。例如,我被这个击中了两次:

>

  • 我有相同的症状和问题是由使用日志引起的。删除依赖有助于摆脱没有找到合适的驱动程序的08001/0消息,而登录到h2控制台:

    <dependency>
        <groupId>org.zalando</groupId>
        <artifactId>logbook-spring-boot-starter</artifactId>
    </dependency>
    

    我不确定,这是给定项目的错误,还是因为错误的用法/配置。

    配置OAuth2对我也有影响。我需要从web和http安全性中排除h2控制台uri。这里有一些信息。请参见片段:

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(
            securedEnabled = true,
            jsr250Enabled = true,
            prePostEnabled = true
    )
    @RequiredArgsConstructor
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        public void configure(WebSecurity web) {
            web.ignoring().antMatchers("/h2-console/**");
        }
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    // only part of config is shown here...
                    .authorizeRequests()
                    .antMatchers("/",
                            "/error",
                            "/favicon.ico",
                            "/**/*.png",
                            "/**/*.gif",
                            "/**/*.svg",
                            "/**/*.jpg",
                            "/**/*.html",
                            "/**/*.css",
                            "/**/*.js",
                            "/h2-console/**")
                    .permitAll()
                    .antMatchers("/auth/**", "/oauth2/**").permitAll()
                    .anyRequest().authenticated()
                    .and()
                    .oauth2Login();
        }
    }
    

  •  类似资料:
    • 有人知道为什么吗?我该怎么解决?

    • 当我调试我的Mule应用程序时,我有错误: 我的java代码: 我的aaplicationContext: 我的app_name.properties: 我的pom: 我的类路径: 运行应用程序后的日志信息: 我还把h2-1.4.200.jar(当我从Anypoint Studio启动我的应用程序)到: 当我从mule服务器h2-1.4.200运行应用程序时。jar,我放在这里: 为什么找不到应用

    • java。sql。SQLException:找不到适合jdbc的驱动程序:h2:tcp://localhost/当我尝试使用java web应用程序连接到h2数据库时,抛出了~/ZadatakDB。 我可以使用H2控制台没有任何问题,ping是成功的。 我还将h2-1.3.176 jar文件添加到库和WEB-INF/lib中。 下面是我用来连接的Java方法: 我会错过什么? 我还将添加Stack

    • 我的一些代码有问题,我已经搜索并尝试了我所知道的一切,但没有任何运气。 场景: > 应用程序检查JDBC驱动程序是否存在,在本例中是H2驱动程序(org.H2.driver) 如果不存在,应用程序将下载JDBC驱动程序并将其添加到类加载器中,如下所示:(注意:storageDataManager是我用于SQL方法的一个类) 当Storage ageDataManager运行第一个查询时,它会尝试与

    • 我正在尝试一个使用H2的示例。但我无法创建内存中的DB。运行以下程序时,我只收到一条错误消息: Java语言sql。SQLException:在java上找不到适合jdbc:h2:mem的驱动程序。sql/java。sql。DriverManager。java上的getConnection(DriverManager.java:702)。sql/java。sql。DriverManager。数据库

    • 问题内容: 这是错误: 怎么了 问题答案: 您需要将驱动程序加载到某个地方。 您将在程序的类路径中需要postgresql驱动程序.jar文件。