2011-10-10 4 views
0

J'ai un résultat étrange lors de la création d'une nouvelle table dans HSQLDB. Dans la documentation de HSQLDB, "user" est un mot-clé, normalement, nous ne pouvons pas utiliser cette valeur pour le nom de la table ou le nom de la colonne, à moins qu'elle ne soit entre guillemets.Comportement étrange en utilisant le mot-clé de HSQLDB

Cependant, je peux créer une table de base de données avec le nom "USER" et une table de base de données DATA_RESULT avec un nom de colonne "user", sans double-citation du mot-clé.

Un problème survient lors de la lecture des données de la base de données. Par exemple, lorsque j'exécute: "select * from DATA_RESULT" et lisez la valeur de "user" à partir du ResultSet, cela fonctionne.

Si j'exécute "select user from DATA_RESULT" ou "SELECT * from DATA_RESULT where user = 1", une erreur se produit. L'instruction sql n'est pas exécutée correctement, ResultSet.next() renvoie toujours un faux. En outre, à partir de Lists of Keywords for HSQLDB, il est indiqué HyperSQL has two modes of operation, which are selected with the SET DATABASE SQL NAMES { TRUE | FALSE } to allow or disallow the keywords as identifiers. The default mode is FALSE and allows the use of most keywords as identifiers, il n'est pas précisé si "user" peut être utilisé comme identifiant. J'utilise HSQLDB 2.0.0.

Il est assez déroutant. Est-ce que quelqu'un sait ce qui se passe ici?

Merci d'avance! Toute suggestion serait utile. USER est une fonction permettant d'obtenir le nom de l'utilisateur actuel.

Répondre

1

Par exemple:

CALL USER 

Vous pouvez certainement utiliser USER comme nom de table ou de colonne.

Dans l'instruction SELECT, utilisez des guillemets autour du nom.

CREATE TABLE DATA_RESULT ("USER" INT, DATA VARCHAR(100)) 
SELECT * FROM DATA_RESULT WHERE "USER" = 1 

Lorsque des guillemets sont utilisés, les observations doivent correspondre.

Notez que le Guide sur le site web est mis à jour régulièrement et correspond actuellement à la dernière version 2.2.5.