JDBC использует таблицу с заглавной буквы в моем запросе postgres - PullRequest
1 голос
/ 09 февраля 2012

Я использую следующий код

/**
 * @param args
 */
public static void main(String[] args) throws SQLException {
    System.out.println("starting");

    org.postgresql.Driver driver = new org.postgresql.Driver();
    DriverManager.registerDriver(driver);

    Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/epcfe/", "postgres", "aap123!");

    Statement st = con.createStatement();
    st.executeQuery("select * from epcfeschema.PRODUCT");

    System.out.println("done");
}

Я получаю Exception in thread "main" org.postgresql.util.PSQLException: ERROR: relation "epcfeschema.product" does not exist

Если я создаю таблицу с именем продукта в нижнем регистре, это работает нормально, но мне нужно, чтобыстолы со всеми заглушками.Как сохранить JDBC от нижнего регистра таблицы?

Ответы [ 4 ]

6 голосов
/ 09 февраля 2012

Если это проблема гибернации, попробуйте следующее:

@Entity
@Table(name = "\"PRODUCT\"")
public class Product { // ...

Или, что еще лучше, упростите свою жизнь: войдите в postgres и переименуйте таблицу!

ALTER TABLE "PRODUCT" rename to product;

(Ofконечно, другой код может зависеть от названия шапки ...)

6 голосов
/ 09 февраля 2012

Скорее всего, вы создали свои таблицы с использованием двойных кавычек, например:

create table "PRODUCTS" (
  ...
)

Это делает имя таблицы чувствительным к регистру (в соответствии со стандартом SQL), и, следовательно, вам необходимо использовать двойные кавычки каждый разВы получаете доступ к таблице.

select * from epcfeschema."PRODUCT"

и для этого вы должны использовать:

executeQuery("select * from epcfeschema.\"PRODUCT\"");

в своем коде Java (как показал ChssPly76).

Я бы настоятельноРекомендую пересоздать таблицы без двойных кавычек, чтобы сделать их без учета регистра.Тогда они вам никогда не понадобятся, и вам никогда не придется беспокоиться о том, чтобы написать их в верхнем, нижнем или смешанном регистре:

При использовании

create table PRODUCTS (
  ...
)

все следующие операторы будут работать:

select * from Products;
select * from PRODUCTS;
select * from products;

Так что вы можете написать все имена таблиц в верхнем регистре, если хотите.

2 голосов
/ 09 февраля 2012

Укажите ваши имена в таблице:

st.executeQuery("select * from epcfeschema.\"PRODUCT\"");
1 голос
/ 09 февраля 2012

В именах таблиц Postgres (и любой другой разумной базы данных) регистр не учитывается (см. здесь ). Ваша проблема в другом месте - возможно, разрешения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...