RSS 2.0 Версия для КПК (Бета)
Конференция JavaTalks  :  Java форум
JavaTalks - форум программистов
Java форум JavaTalks
форум программистов 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
DatabaseMetaData и mixedCaseQuotedIdentifiers

 
Начать новую тему   Ответить на тему    Список форумов Java форум JavaTalks -> JDBC драйвера
Предыдущая тема :: Следующая тема  
Автор Сообщение
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. Smile В 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* вероятно (?) играют значения только если по системным таблицам (где хранятся названия идентификаторов) выборки делать
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Java форум JavaTalks -> JDBC драйвера Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Этот сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

GetJava Download Button Rambler's Top100
Хостинг от bizname.ru
При поддержке hitech.com.ua