web-dev-qa-db-fra.com

Base de données introuvable et IFEXISTS = true, nous ne pouvons donc pas la créer automatiquement

Je reçois une erreur après l'ouverture de la console de base de données H2. J'entre le nom de la base de données mais il montre une erreur de base de données introuvable:

Base de données "C:/Users/Barlekar/onlineshoppings" introuvable et IFEXISTS = true, nous ne pouvons donc pas la créer automatiquement [90146-199] 90146/90146 (Aide)

org.h2.jdbc.JdbcSQLNonTransientConnectionException: base de données "C:/Users/Barlekar/onlineshoppings" introuvable et IFEXISTS = true, nous ne pouvons donc pas la créer automatiquement [90146-199]

15
sonal barlekar

utilisez les propriétés ci-dessous dans le pom.xml et réexécutez l'application.

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

<groupId>com.in28minutes.database</groupId>
<artifactId>database-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>database-demo</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <Java.version>1.8</Java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>
0
Mdhar9e

J'ai trouvé que vous pouvez ajouter un paramètre aux options de démarrage "-ifNotExists" lors du démarrage de h2 db. Par programme, vous pouvez le faire de cette façon:

Server.createTcpServer ("- tcpPort", "[PORT]", "-tcpAllowOthers", "-ifNotExists"). Start ();

Si vous utilisez l'invite de commande, la même chose s'applique

0
mainas

Ajoutez-le simplement au fichier application.properties :

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
0
Fahad Israr

J'ai rencontré ce problème et résolu de la manière suivante

  • Pour utiliser la base de données H2 - Votre application doit être exécutée dans l'environnement JDK, pas dans l'environnement JRE, pour modifier, veuillez suivre les étapes ci-dessous:

    1. Faites un clic droit sur votre projet> propriétés
    2. Sélectionnez "Java Build Path" à gauche, puis "JRE System Library", cliquez sur Edit…
    3. Sélectionnez "JRE par défaut de l'espace de travail"
    4. Cliquez sur "JRE installés"
    5. Si vous voyez JRE que vous voulez dans la liste, sélectionnez-le (sélectionner un JDK est OK aussi)
    6. Sinon, cliquez sur Rechercher…, accédez à Ordinateur> Windows C:> Program Files> Java, puis cliquez sur OK
    7. Maintenant, vous devriez voir tous les JRE installés, sélectionnez celui que vous voulez
    8. Cliquez sur OK/Terminer un million de fois. J'ai utilisé Georgie étapes fournies ici -> https://stackoverflow.com/a/29640138


  • Dans la console de connexion H2, l'URL par défaut indiquée par Spring Boot sera jdbc:h2:~/test, il doit correspondre aux propriétés de l'application Spring Boot spring.datasource.url=jdbc:h2:mem:testdb donc remplacez l'url dans la console de connexion et cliquez sur se connecter J'ai utilisé [Ivan Xue] [2] a fourni les étapes ici -> https://stackoverflow.com/a/56539107

  • Veuillez effacer la cible à l'aide de la commande mvn clean et autoriser la construction du projet si elle n'est pas appliquée à l'aide de maven force update snapshot ou mvn install, puis redémarrez votre application de démarrage de printemps pour voir la différence
0

En dégradant la version, la H2 DB fonctionne mais la table que je ne peux pas voir. Extrait de code

Contrôleur

@RestController
public class CurrencyExchangeController {

    @Autowired
    private Environment env;
    @GetMapping("/currency-exchange/from/{from}/to/{to}")
    public CurrencyExchange retriveCurrencyExchange(@PathVariable String from,@PathVariable String to)
    {
        CurrencyExchange currencyExchange = new CurrencyExchange(1000L, from, to, BigDecimal.valueOf(65));
        currencyExchange.setPort(Integer.parseInt(env.getProperty("local.server.port")));
        return currencyExchange;

    }

POJO

@Entity
public class CurrencyExchange {
    @Id
    private Long id;
    @Column(name ="currency_from")
    private String from;
    @Column(name ="currency_to")
    private String to;
    @Column(name ="conversion_multiple")
    private BigDecimal conversion;
    private int port;

Spring boot main

@SpringBootApplication
@ComponentScan(basePackages = {"com.example"})
public class CurrencyExchangeServiceApplication {

    public static void main(String[] args) throws SQLException {
        SpringApplication.run(CurrencyExchangeServiceApplication.class, args);

    }

app.prop

spring.application.name=currency-exchange-service
server.port=8000

spring.jpa.show-sql=true
spring.h2.console.enabled=true

data.sql file
insert into currency_exchange(id,currency_from,currency_to,conversion_multiple,port)
values(1001,'USD','INR',65,0);
insert into currency_exchange(id,currency_from,currency_to,conversion_multiple,port)
values(1002,'EUR','INR',75,0);
0
Abdul Wajeed

Selon la documentation officielle sur le site H2: http://www.h2database.com/html/quickstart.html

Ça dit,

L'URL de la base de données jdbc:h2:~/test ouvre le test de la base de données dans votre répertoire personnel

Une nouvelle base de données est automatiquement créée


Si vous utilisez l'URL: jdbc:h2:~/test, il créera une base de données pour vous. J'ai la config ici et j'essaye de l'utiliser:

enter image description here

Cette configuration a fonctionné pour moi et j'ai eu la même erreur, et elle est corrigée maintenant. Si vous ne voulez pas que la base de données soit appelée test, vous pouvez la renommer en la base de données souhaitée. Dans votre cas, le nom que vous voulez est: onlineshoppings si je ne me trompe pas. L'URL à utiliser serait alors jdbc:h2:~/onlineshoppings.


Une petite mise en garde

Assurez-vous que lorsque vous utilisez la nouvelle URL, vous vous connectez d'abord à la base de données au lieu de tester la connexion. De cette façon, il créera la base de données pour vous. Sinon, vous testez la connexion pour une base de données inexistante.

J'espère que ça aide et bonne chance!


EDIT: Si vous souhaitez utiliser H2 dans d'autres modes, accédez à https://h2database.com/html/features.html et trouvez le mode que vous voulez et utilisez l'URL associée pour l'activer.

En résumé, jdbc:h2:~/DatabaseName crée la base de données pour vous tandis que d'autres modes comme jdbc:h2:tcp://localhost/~/databaseName ne pas. Assurez-vous d'utiliser jdbc:h2:~/DatabaseName chaque fois que vous souhaitez créer une base de données, puis si vous le souhaitez, utilisez d'autres URL pour la même base de données pour l'utiliser dans un mode différent.

0
Compiler v2

Vérifiez l'url jdbc utilisée dans la console h2 pour voir si elle correspond à ce que vous avez spécifié

0
Rohit Kumar

première URL vers jdbc: h2: mem: testdb deuxième a changé la version de Spring Boot en 2.1.3 et cela fonctionne

Problème:

Base de données introuvable ou dossier de test pas dans c:/user/username/test

Copiez-collez-le dans le fichier application.properties:

spring.datasource.url=jdbc:h2:~/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Le problème était lié à l'URL, vérifiez-le. Problème résolu.

0
PRATEIK UPADHYAY

J'ai fait face à ce problème récemment, il y avait deux problèmes.

  1. Par défaut, il n'était pas rempli avec une base de données en mémoire plutôt jdbc: h2: ~/test.
  2. Le nom de base de données que j'ai configuré dans la source de données n'était pas test.

lorsque j'ai changé l'URL JDBC en jdbc:h2:mem:{db-name-in-config}, Ça a marché comme sur des roulettes.

0

Ajout à la réponse de @Prateik Upadhyay, si vous voulez renommer votre nom de connexion db en quelque chose d'autre, la seule chose qui a fonctionné pour moi est ci-dessous. J'utilise la version Spring Boot 2.2.4. avec la version h2 1.4.200.

spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:h2:~/MyComponentDB;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1;MODE=Oracle
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
0
kkk
Along with h2 dependency in POM :
<dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
    </dependency>

J'ai ajouté jpa, la dépendance du référentiel crud dans POM comme indiqué ci-dessous et cela a bien fonctionné pour moi:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
0
Pankaj