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

Spring boot应用程序找不到SQLite jdbc驱动程序类

东郭自强
2023-03-14

在我的Spring boot应用程序中,我指定了对sqlite jdbc驱动程序的依赖:

<dependency>
  <groupId>org.xerial</groupId>
  <artifactId>sqlite-jdbc</artifactId>
  <version>3.34.0</version>
</dependency>

在波姆。xml属性

<hibernate.version>5.1.0.Final</hibernate.version>

并在我的申请表中填写以下内容。属性:

spring.jpa.database-platform=com.springboot.sqlite.SQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.defer-datasource-initialization = true

spring.datasource.url = jdbc:sqlite:cryptobot.db
spring.datasource.driver-class-name = org.sqlite.JDBC

我提供的SQLDialogue类是从本文复制而来的。但是运行应用程序失败了

组织。springframework。豆。工厂UnsatifiedDependencyException:创建名为“entityManagerFactory”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/hibernatejbaconfiguration.class]:通过方法“entityManagerFactory”参数0表示的未满足依赖关系;嵌套的异常是org。springframework。豆。工厂未满足的依赖异常:创建名为“entityManagerFactoryBuilder”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/hibernatejbaconfiguration.class]:通过方法“entityManagerFactoryBuilder”参数0表示未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂BeanCreationException:创建名为“jpaVendorAdapter”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/hibernatejbaconfiguration.class]中定义:通过工厂方法实例化bean失败;嵌套的异常是org。springframework。豆。BeanInstationException:未能实例化[org.springframework.orm.jpa.JpaVendorAdapter]:工厂方法“JpaVendorAdapter”引发异常;嵌套的例外是java。lang.NoClassDefFoundError:org/hibernate/jpa/HibernatePersistenceProvider位于org。springframework。豆。工厂支持构造器解决方案。在org上创建ArgumentArray(ConstructorResolver.java:800)~[spring-beans-5.3.13.jar:5.3.13]。springframework。豆。工厂支持构造器解决方案。在org上实例化eusingFactoryMethod(ConstructorResolver.java:541)~[spring-beans-5.3.13.jar:5.3.13]。springframework。豆。工厂支持AbstractAutoWireAbleBeanFactory。InstanceUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。豆。工厂支持AbstractAutoWireAbleBeanFactory。createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。豆。工厂支持AbstractAutoWireAbleBeanFactory。doCreateBean(AbstractAutowireCapableBeanFactory.java:582)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。豆。工厂支持AbstractAutoWireAbleBeanFactory。createBean(AbstractAutowireCapableBeanFactory.java:542)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。豆。工厂支持抽象工厂。lambda$doGetBean$0(AbstractBeanFactory.java:335)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。豆。工厂支持DefaultSingletonBeanRegistry。getSingleton(DefaultSingletonBeanRegistry.java:234)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。豆。工厂支持抽象工厂。doGetBean(AbstractBeanFactory.java:333)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。豆。工厂支持抽象工厂。getBean(AbstractBeanFactory.java:208)~[spring-beans-5.3.13.jar:5.3.13]位于org。springframework。上下文支持AbstractApplicationContext。getBean(AbstractApplicationContext.java:1154)~[spring-context-5.3.13.jar:5.3.13]位于org。springframework。上下文支持AbstractApplicationContext。在org上完成BeanFactoryInitialization(AbstractApplicationContext.java:908)~[spring-context-5.3.13.jar:5.3.13]。springframework。上下文支持AbstractApplicationContext。在org上刷新(AbstractApplicationContext.java:583)~[spring-context-5.3.13.jar:5.3.13]。springframework。靴子Spring应用程序。在org上刷新(SpringApplication.java:730)~[spring-boot-2.6.1.jar:2.6.1]。springframework。靴子Spring应用程序。refreshContext(SpringApplication.java:412)~[spring-boot-2.6.1.jar:2.6.1]位于org。springframework。靴子Spring应用程序。在org上运行(SpringApplication.java:302)~[spring-boot-2.6.1.jar:2.6.1]。springframework。靴子Spring应用程序。在org上运行(SpringApplication.java:1301)~[spring-boot-2.6.1.jar:2.6.1]。springframework。靴子Spring应用程序。在com上运行(SpringApplication.java:1290)~[spring-boot-2.6.1.jar:2.6.1]。比南斯。机器人程序。BinanceBot应用程序。main(BinancebotApplication.java:10)~[classes/:na]

这里出了什么问题?

共有3个答案

白光耀
2023-03-14
匿名用户

我试着在我的本地机器上复制这个,这里是解决方案。

你必须通过扩展组织来创建自己的dilect。冬眠地方话

package com.mehul.SQLiteDemo.dialect;

import java.sql.Types;

import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.dialect.function.VarArgsSQLFunction;
import org.hibernate.type.StringType;

public class SQLDialect extends Dialect {
    public SQLDialect() {
        registerColumnType(Types.BIT, "integer");
        registerColumnType(Types.TINYINT, "tinyint");
        registerColumnType(Types.SMALLINT, "smallint");
        registerColumnType(Types.INTEGER, "integer");
        registerColumnType(Types.BIGINT, "bigint");
        registerColumnType(Types.FLOAT, "float");
        registerColumnType(Types.REAL, "real");
        registerColumnType(Types.DOUBLE, "double");
        registerColumnType(Types.NUMERIC, "numeric");
        registerColumnType(Types.DECIMAL, "decimal");
        registerColumnType(Types.CHAR, "char");
        registerColumnType(Types.VARCHAR, "varchar");
        registerColumnType(Types.LONGVARCHAR, "longvarchar");
        registerColumnType(Types.DATE, "date");
        registerColumnType(Types.TIME, "time");
        registerColumnType(Types.TIMESTAMP, "timestamp");
        registerColumnType(Types.BINARY, "blob");
        registerColumnType(Types.VARBINARY, "blob");
        registerColumnType(Types.LONGVARBINARY, "blob");
        // registerColumnType(Types.NULL, "null");
        registerColumnType(Types.BLOB, "blob");
        registerColumnType(Types.CLOB, "clob");
        registerColumnType(Types.BOOLEAN, "integer");

        registerFunction("concat", new VarArgsSQLFunction(StringType.INSTANCE, "", "||", ""));
        registerFunction("mod", new SQLFunctionTemplate(StringType.INSTANCE, "?1 % ?2"));
        registerFunction("substr", new StandardSQLFunction("substr", StringType.INSTANCE));
        registerFunction("substring", new StandardSQLFunction("substr", StringType.INSTANCE));
    }

    public boolean supportsIdentityColumns() {
        return true;
    }

    public boolean hasDataTypeInIdentityColumn() {
        return false; // As specify in NHibernate dialect
    }

    public String getIdentityColumnString() {
        // return "integer primary key autoincrement";
        return "integer";
    }

    public String getIdentitySelectString() {
        return "select last_insert_rowid()";
    }

    public boolean supportsLimit() {
        return true;
    }

    protected String getLimitString(String query, boolean hasOffset) {
        return new StringBuffer(query.length() + 20).append(query).append(hasOffset ? " limit ? offset ?" : " limit ?")
                .toString();
    }

    public boolean supportsTemporaryTables() {
        return true;
    }

    public String getCreateTemporaryTableString() {
        return "create temporary table if not exists";
    }

    public boolean dropTemporaryTableAfterUse() {
        return false;
    }

    public boolean supportsCurrentTimestampSelection() {
        return true;
    }

    public boolean isCurrentTimestampSelectStringCallable() {
        return false;
    }

    public String getCurrentTimestampSelectString() {
        return "select current_timestamp";
    }

    public boolean supportsUnionAll() {
        return true;
    }

    public boolean hasAlterTable() {
        return false; // As specify in NHibernate dialect
    }

    public boolean dropConstraints() {
        return false;
    }

    public String getAddColumnString() {
        return "add column";
    }

    public String getForUpdateString() {
        return "";
    }

    public boolean supportsOuterJoinForUpdate() {
        return false;
    }

    public String getDropForeignKeyString() {
        throw new UnsupportedOperationException("No drop foreign key syntax supported by SQLiteDialect");
    }

    public String getAddForeignKeyConstraintString(String constraintName, String[] foreignKey, String referencedTable,
            String[] primaryKey, boolean referencesPrimaryKey) {
        throw new UnsupportedOperationException("No add foreign key syntax supported by SQLiteDialect");
    }

    public String getAddPrimaryKeyConstraintString(String constraintName) {
        throw new UnsupportedOperationException("No add primary key syntax supported by SQLiteDialect");
    }

    public boolean supportsIfExistsBeforeTableName() {
        return true;
    }

    public boolean supportsCascadeDelete() {
        return false;
    }
}

还可以用包和类名更新spring.jpa.database-Platform=com.mehul.SQLiteDemo.dialect.SQLDialect。

注意:我使用了

胡锋
2023-03-14

由于Hibernate不附带SQLite的方言,因此您可以遵循以下路径:

import java.sql.Types;
import org.hibernate.dialect.Dialect;

public class SQLiteDialect extends Dialect {
 public SQLiteDialect() {
  super();
  registerColumnType(Types.BIT, "integer");
  registerColumnType(Types.TINYINT, "tinyint");
  registerColumnType(Types.SMALLINT, "smallint");
  registerColumnType(Types.INTEGER, "integer");
  registerColumnType(Types.BIGINT, "bigint");
  registerColumnType(Types.FLOAT, "float");
  registerColumnType(Types.REAL, "real");
  registerColumnType(Types.DOUBLE, "double");
  registerColumnType(Types.NUMERIC, "numeric");
  registerColumnType(Types.DECIMAL, "decimal");
  registerColumnType(Types.CHAR, "char");
  registerColumnType(Types.VARCHAR, "varchar");
  .
  .
  .
 }
}

单击查看完整示例。

对于Hibernate 5,添加依赖项:

    <dependency>
        <groupId>com.github.gwenn</groupId>
        <artifactId>sqlite-dialect</artifactId>
        <version>0.1.2</version>
    </dependency>

和配置:

hibernate.dialect=org.sqlite.hibernate.dialect.SQLiteDialect

洪英豪
2023-03-14

这个主要问题是,通过pom中的以下html" target="_blank">配置,您被显式配置为使用Hibernate 5.1.0。xml

<hibernate.version>5.1.0.Final</hibernate.version>

它太旧了(6年前发布),spring boot 2.6.1已经很长时间不支持它了。

从技术上讲,Spring引导2.6基于Spring5.3,Spring5.3是针对Hibernate 5.3开发和测试的,并在运行时尽最大努力与Hibernate 5.2向后兼容。您可以在HibernateJpaVendorAdapter和此问题的javadoc中找到此类信息。

它试图加载组织。冬眠jpa。HibernatePersistenceProvider在某些时候,但是这个类只在Hibernate 5.2之后存在。由于您现在正在使用Hibernate 5.1,因此它抱怨无法加载它,并出现以下错误:

[org.springframework.orm.jpa.JpaVendorAdapter]:工厂方法“JpaVendorAdapter”引发异常;嵌套的例外是java。lang.NoClassDefFoundError:org/hibernate/jpa/HibernatePersistenceProvider

因此,只需删除上面的

 类似资料:
  • 问题内容: 输出 >无法连接到数据库服务器java.lang.ClassNotFoundException 问题答案: 看来您应该将MySQL驱动程序jar放入 类路径中 。

  • 问题内容: 我刚刚用Apache,MySQL和PHP安装了Debian Lenny,并且收到了PDOException 。 这是它所指的特定代码行: ,,,和是我所定义的常量。它在生产服务器(以及我以前的Ubuntu Server设置)上运行良好。 这与我的PHP安装有关吗? 搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。 问题答案: 您需要有一个名为pdo_mysql的模块。在

  • 问题内容: 我在只能访问MySQL和FTP的服务器上开发网站,因此我运行的所有命令都是通过b374k php shell进行的。我在使用SQL驱动程序时遇到Laravel问题。我尝试切换到文件托管的SQLite(在database / database.sqlite中),但是引发的异常与使用MySQL时相同。控制台的输入和输出如下: 服务器上安装的Apache扩展为: 可能是什么问题,我该如何解决

  • 因此,我一直在使用sbt with assembly将所有依赖项打包到一个jar中,用于spark工作。我做了几个工作,使用设置连接池信息,将其广播出去,然后在RDD上使用获取连接,并将数据插入数据库。在我的sbt构建脚本中,我包括 这确保JDBC连接器与作业打包在一起。一切都很好。 因此,最近我开始使用SparkSQL,并意识到使用中的新特性,简单地获取一个dataframe并将其保存到jdbc

  • 我正在一个服务器上开发一个网站,我只能访问MySQL和FTP,所以我运行的所有命令都是通过b374k php shell。我遇到了SQL驱动程序的Laravel问题。我尝试切换到文件托管的SQLite(在database/database.SQLite中),但引发的异常与使用MySQL时相同。控制台的输入输出如下: 服务器上安装的Apache扩展包括: 问题可能是什么?我如何修复它?(我没有访问根

  • 我正在开发一个java web应用程序,它使用Jasper report来显示一些报表。现在我的版本发生了一些变化,我得到了以下错误: 我认为错误可能是由于构建路径造成的。这是我的依赖树: 你能给我一些关于这个错误的建议吗?