hsqldb rapports “utilisateur ne dispose pas d'un privilège ou d'objet non trouvé” dans la mémoire de la base de données
De L'Environnement: Le Printemps(3.2.3.La LIBÉRATION) + MyBatis(3.2.2) + HSQL(2.3.0)
<resultMap id="hashMapResult" type="java.util.HashMap">
<result property="key" column="key" />
<result property="value" column="value" />
</resultMap>
<select id="getSettings" resultMap="hashMapResult">
SELECT "KEY","VALUE" from "PUBLIC"."SETTINGS";
</select>
create table "SETTINGS" (
"KEY" varchar(255) not null,
"VALUE" varchar(512) not null,
CONSTRAINT SETTINGS_KEY_UNIQUE UNIQUE("KEY")
);
URL: jdbc:hsqldb:mem:mydb;sql.syntax_mys=true;arrêt=true;
Lors de l'utilisation de la mémoire de base de données, le message suivant est apparu:
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: SETTINGS
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.SchemaManager.getTable(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.ParserDQL.readTableName(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
Mais lors de l'utilisation de fichier de base de données jdbc:hsqldb:fichier:mydb;sql.syntax_mys=true;arrêt=true; pas d'erreurs.
Je suis à l'aide du Printemps EmbeddedDatabaseFactory pour initialiser la base de données:
try {
EmbeddedDatabaseFactory dbFactory = new EmbeddedDatabaseFactory();
DatabaseConfig dbConfig = appConfig.getDbConfig();
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.setContinueOnError(false);
populator.setIgnoreFailedDrops(false);
DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
populator.addScript(resourceLoader.getResource(dbConfig
.getSqlSchemeFile()));
populator.addScript(resourceLoader.getResource(dbConfig
.getSqlDataFile()));
dbFactory.setDatabasePopulator(populator);
dbFactory.setDatabaseName(dbConfig.getName());
dbFactory.setDatabaseConfigurer(new HSQLConfigurer(dbConfig));
return dbFactory.getDatabase();
} catch (Exception e) {
logger.error("dataSource error", e); //$NON-NLS-1$
return null;
}
Quelqu'un sait pourquoi?
OriginalL'auteur SunLiWei | 2013-08-12
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas utiliser d'arrêt=true dans ce contexte. Il semble que la connexion est fermée et la base de données est à l'arrêt, ce qui signifie que la mémoire de la base de données n'existe plus.
Vous devriez également éviter d'utiliser comme VALEUR d'un nom de colonne. C'est un mot-clé.
OriginalL'auteur fredt
De s'étendre sur les fredt la réponse de
Cette erreur est signalée lorsqu'une colonne est nommée avec un mot réservé - donc une colonne nommée "compter" ne peuvent pas non plus de la même façon.
Pour une liste des mots réservés (pour HSQL et autres) se référer à cette réponse - Comment savoir si un nom de colonne est un mot clé réservé à l'échelle de diverses bases de données
OriginalL'auteur user2980894