|
|
Java форум JavaTalks форум программистов
|
|
|
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
aleksandy Постоянный посетитель
Зарегистрирован: 19.03.2007 Сообщения: 537
|
Добавлено: Ноя 19, 2009 8:49 Заголовок сообщения: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
DatabaseMetaData#storesMixedCaseQuotedIdentifiers( ) возвращает true, если БД трактует SQL-идентификатор, заключенный в кавычки, как регистронезависимый и сохраняет его без изменения регистра.
DatabaseMetaData#supportsMixedCaseQuotedIdentifiers() возвращает true, если БД трактует SQL-идентификатор, заключенный в кавычки, как регистрозависимый и сохраняет его без изменения регистра.
Как я понимаю в результате одно: объект БД сохраняется регистрозависимым.
Вопрос: почему методы могут возвращать разные результаты? Второй метод возвращает true, в то время как первый - false.
Например, такая ситуация наблюдается в jaybird (для firebird), postgresql, но не наблюдается в oracle, derby, hsql.
Это баг в драйвере, или я чего-то не понимаю? |
|
| Вернуться к началу |
|
 |
kazukin Новичок
Зарегистрирован: 01.12.2008 Сообщения: 45
|
Добавлено: Ноя 19, 2009 15:27 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| aleksandy писал(а): |
Вопрос: почему методы могут возвращать разные результаты? Второй метод возвращает true, в то время как первый - false.
|
По идее, данные методы не могут возвращать одинаковые значения, так как один проверяет на регистрозависимость, а второй на регистроНЕзависимость + как он сохраняется. Вы уверены, что для оракла дерби и hsql они одинаковые?
По моему, их можно разбить так:
| Код: |
if(databaseMetaData.supportsMixedCaseQuotedIdentifiers())
{
// Support mixedcase
}
else
{
//Doesn't support mixedcase
if(databaseMetaData.storesMixedCaseQuotedIdentifiers())
{
// store in mixcase
}
else if(databaseMetaData.storesLowerCaseQuotedIdentifiers())
{
// store in lower case
}
else if(databaseMetaData.storesUpperCaseQuotedIdentifiers())
{
// store in upper case
}
}
|
|
|
| Вернуться к началу |
|
 |
kazukin Новичок
Зарегистрирован: 01.12.2008 Сообщения: 45
|
Добавлено: Ноя 19, 2009 15:56 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| kazukin писал(а): |
По идее, данные методы не могут возвращать одинаковые значения |
пардон, я имел ввиду два тру, два фолса могут конечно |
|
| Вернуться к началу |
|
 |
aleksandy Постоянный посетитель
Зарегистрирован: 19.03.2007 Сообщения: 537
|
Добавлено: Ноя 20, 2009 5:35 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| kazukin писал(а): |
| Вы уверены, что для оракла дерби и hsql они одинаковые? |
Сейчас перепроверил, могу сказать, что ошибся насчет hsql. В oracle и EmbedDatabaseMetaData для derby возвращают true всегда, там у них прописано тупо return true. Для остальных видов derby все зависит от настроек.
| kazukin писал(а): |
| Код: |
if(databaseMetaData.supportsMixedCaseQuotedIdentifiers()){
}else{
if(databaseMetaData.storesMixedCaseQuotedIdentifiers()){
// store in mixcase
}
} |
|
Как можно сохранить в mixedСase, если он не поддерживается??? |
|
| Вернуться к началу |
|
 |
kazukin Новичок
Зарегистрирован: 01.12.2008 Сообщения: 45
|
Добавлено: Ноя 20, 2009 8:06 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| Цитата: |
Как можно сохранить в mixedСase, если он не поддерживается??? |
вероятно, stores* и supports-это два разных аспекта.
supports- как БД трактует идентификатор при обращении по нему.
stores* -как БД сохраняет идентификатор при его создании, т.е. конвертирует(uppercase or lowercase) или сохраняет mixedcase.
| aleksandy писал(а): |
В oracle и EmbedDatabaseMetaData для derby возвращают true всегда, там у них прописано тупо return true.
|
странно это, исходя из javadocs не могут они оба быть тру.
Может быть имеет смысл спросить на оракловом форуме об этом |
|
| Вернуться к началу |
|
 |
aleksandy Постоянный посетитель
Зарегистрирован: 19.03.2007 Сообщения: 537
|
Добавлено: Ноя 20, 2009 8:15 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| kazukin писал(а): |
supports- как БД трактует идентификатор при обращении по нему.
stores* -как БД сохраняет идентификатор при его создании, т.е. конвертирует(uppercase or lowercase) или сохраняет mixedcase.
|
Т.е. при supportsMixedCaseQuotedIdentifiers() == true и storesMixedCaseQuotedIdentifiers() == false
| Код: |
SELECT * FROM "MixedCaseTable" |
БД ищет именно MixedCaseTable, а
| Код: |
CREATE TABLE "MixedCaseTable" |
БД создаст в зависимости от storesLowerCaseQuotedIdentifiers() и storesUpperCaseQuotedIdentifiers(). Не кажется, что это бред, который расходится с реальностью? |
|
| Вернуться к началу |
|
 |
kazukin Новичок
Зарегистрирован: 01.12.2008 Сообщения: 45
|
Добавлено: Ноя 20, 2009 8:35 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| aleksandy писал(а): |
| kazukin писал(а): |
supports- как БД трактует идентификатор при обращении по нему.
stores* -как БД сохраняет идентификатор при его создании, т.е. конвертирует(uppercase or lowercase) или сохраняет mixedcase.
|
Т.е. при supportsMixedCaseQuotedIdentifiers() == true и storesMixedCaseQuotedIdentifiers() == false
|
Этого не может быть, цитата из javadocs к supportsMixedCaseQuotedIdentifiers
Retrieves whether this database treats mixed case quoted SQL identifiers as case sensitive and as a result stores them in mixed case.
т.е. если supportsMixedCaseQuotedIdentifiers()==true сохраняются идентификаторы автоматом в mixedcase без вариантов, а store* методы имеют смысл только при supportsMixedCaseQuotedIdentifiers() == false
посмотрите на java код, который я приводил |
|
| Вернуться к началу |
|
 |
aleksandy Постоянный посетитель
Зарегистрирован: 19.03.2007 Сообщения: 537
|
Добавлено: Ноя 20, 2009 8:48 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| kazukin писал(а): |
| т.е. если supportsMixedCaseQuotedIdentifiers()==true сохраняются идентификаторы автоматом в mixedcase без вариантов, а store* методы имеют смысл только при supportsMixedCaseQuotedIdentifiers() == false |
Все. Я понял, спасибо большое за пояснение.
З.Ы. Но все равно мне кажется, что при supportsMixedCaseQuotedIdentifiers() и storesMixedCaseQuotedIdentifiers() должны возвращать одинаковые значения. Т.к. из твоего предыдущего поста следует, что при supportsMixedCaseQuotedIdentifiers() == false идентификаторы автоматом должны сохраняться на основании stores[Lower|Upper]CaseQuotedIdentifiers, а если они возвращают false, то это фактически означает, что вне зависимости от значения storesMixedCaseQuotedIdentifiers идентификатор внутри кавычек не подвергается изменению, т.к. мы не приводим идентификатор ни к одному из регистров (верхнему или нижнему). |
|
| Вернуться к началу |
|
 |
kazukin Новичок
Зарегистрирован: 01.12.2008 Сообщения: 45
|
Добавлено: Ноя 20, 2009 11:03 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| aleksandy писал(а): |
З.Ы. Но все равно мне кажется, что при supportsMixedCaseQuotedIdentifiers() и storesMixedCaseQuotedIdentifiers() должны возвращать одинаковые значения. |
при supportsMixedCaseQuotedIdentifiers()=true ни один из трех store* методов не может быть равен тру.Просто потому, что они проверяют противоположные утверждения
1) supportsMixedCaseQuotedIdentifiers
Retrieves whether this database treats mixed case quoted SQL identifiers as case sensitive and as a result stores them in mixed case.
2) store*
Retrieves whether this database treats mixed case quoted SQL identifiers as case insensitive and stores them in .... case
Проще говоря, если разбить на 2 аспекта то получается следующее.
Supports(true|false) и Stores(lowercase|uppercase|mixedcase)
Комбинаций из этих параметров могут быть не 6, а всего 4, потому что при Supports=true -> Stores=mixedcase автоматом
И соответственно есть 4 метода, возвращающих boolean на каждую из комбинаций, т.е.
1) true + mixedcase -> supportsMixedCaseQuotedIdentifiers
2) false + mixedcase -> storesMixedCaseQuotedIdentifiers
3) false + lowercase -> storesLowerCaseQuotedIdentifiers
4) false + uppercase -> storesUpperCaseQuotedIdentifiers
Ну это все в теории (исходя из javadocs), на практике может получиться какой нибудь сюрприз, вроде ситуации с оракловым драйвером |
|
| Вернуться к началу |
|
 |
aleksandy Постоянный посетитель
Зарегистрирован: 19.03.2007 Сообщения: 537
|
Добавлено: Ноя 20, 2009 11:19 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
Тогда получается, что при supportsMixedCaseQuotedIdentifiers()==false и
storesMixedCaseQuotedIdentifiers()==false
| Код: |
select * from "MixedCaseTable" |
и
| Код: |
select * from "mIXEDcASEtABLE" |
обращаются к одной и той же таблице o_O? |
|
| Вернуться к началу |
|
 |
kazukin Новичок
Зарегистрирован: 01.12.2008 Сообщения: 45
|
Добавлено: Ноя 20, 2009 11:36 Заголовок сообщения: Re: DatabaseMetaData и mixedCaseQuotedIdentifiers |
|
|
| aleksandy писал(а): |
Тогда получается, что при supportsMixedCaseQuotedIdentifiers()==false и
storesMixedCaseQuotedIdentifiers()==false
| Код: |
select * from "MixedCaseTable" |
и
| Код: |
select * from "mIXEDcASEtABLE" |
обращаются к одной и той же таблице o_O? |
На обращение влияет только supportsMixedCaseQuotedIdentifiers().
Т.е. если он фолс, то можно в любом кэйсе писать, неважно какой store* срабатывает
store* вероятно (?) играют значения только если по системным таблицам (где хранятся названия идентификаторов) выборки делать |
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|