[Java] JDBC

laki


Properties propConn = new Properties;
propConn.put("useUnicode","true");
propConn.put("characterEncoding", "cp1251");
propConn.put("user", user);
propConn.put("password", pwd);
connection = DriverManager.getConnection(getJDBCURL(host, port, db propConn);
в мускуле работает все ок при добавлении русских данных.
в постгресе не работает пишет хитрые значки хз в какой кодировке.
кодирока базы:
Name Description
SQL_ASCII ASCII
когда делаю запись из pgAdmin-a, содержащую русские слова, все ОК. че надо указать в пропертях коннекта?

Werdna

попробуй все хранить в utf-8, так правильнее

laki

постгрес ругается на
вот такое
insert into T values('некоторый текст');
если база в кодировке UTF
говорит типа это не юникод

Werdna

ну значит ты не юникод шлешь, правильно тебе говорят.

Werdna

я точно припоминаю, что были какие-то когда-то проблемы у постгреса с русскими не юникодными кодировками...

laki

хмм.

volume_id = Integer.parseInt(dbp.next_id("volumes_id_volume";
String q_insert = "insert into Volumes (ID_Volume, ID_Journal, ID_Status, VolumeTitleEng, VolumeTitleRus, VolumeUrlSD) " +
"values (" + Utils.strQuoteP(volume_id + "") + ", " +
Utils.strQuoteP(journal_id + "") + "," +
Utils.strQuoteP(sActiveStatus) + ", " +
Utils.strQuoteP(strTitleEng) + "," +
Utils.strQuoteP(Translator.Translate(strTitleEng + "," +
Utils.strQuoteP(strUrl) +
")";
dbp.execute(q_insert);
так у джавы строки представляются в виде юникода ил у меня уже крыша едет?
именно чтото хитрое надо указать в пропертях коннекта.
из phpPgAdmin-a, pgAdmina все ОК.
делал аналогично с французским языком база была в той же кодировке все ОК, но не из под джавов.

Werdna

вот уж что не знаю, так вашу Джаву
наверняка тебе постгрес не врет, так в чем проблема перекодировать?

puare

PreparedStatement не пробовал использовать? Реально помогает - не надо писать такую жесть в виде запроса... Если уж JDBC пользовать - то до конца

anton7805

то есть ты используешь
propConn.put("useUnicode","true");
propConn.put("characterEncoding", "UTF-8");
propConn.put("user", user);
propConn.put("password", pwd);
и дефолтная кодировка базы utf -8 и не работает?

laki

без пропертей записать в базу utf не получается.

laki

не пробовал предпочитаю запрос контролировать сам, я понимаю о чем идет речь

voronetskaya

ты бы лучше послушал, че тебе умные люди советуют...

laki

кто именно?
перепробовал все. ни хрена не работает.

voronetskaya

кто именно?
может по ссылке будет понятнее?

laki

ня смяшно.
ты же джавер подскажи плиз , соком или пывом проставлюсь
именно под постгрес, под оракл я знаю как

voronetskaya

пробовал PreparedStatement пользовать?

laki

ага типа аналог ADO. ладно ща попробую.
тревожит меня чтото мой юный поддаван. (с) Лукас

laki


dbp.connection.prepareStatement("insert into Volumes (ID_Volume, ID_Journal, ID_Status, VolumeTitleEng, VolumeTitleRus, VolumeUrlSD) " +
"values (" + Utils.strQuoteP(volume_id + "") + ", " +
Utils.strQuoteP(journal_id + "") + "," +
Utils.strQuoteP(sActiveStatus) + ", " +
Utils.strQuoteP(strTitleEng) + "," +
Utils.strQuoteP(Translator.Translate(strTitleEng + "," +
Utils.strQuoteP(strUrl) +
")");
ладно сделал.
как применить?

sasha79

Примерно так это должно выглядеть, вроде:

PreparedStatement stmt = dbp.connection.prepareStatement(
"insert into Volumes (ID_Volume, ID_Journal, ID_Status, VolumeTitleEng, " +
"VolumeTitleRus, VolumeUrlSD) values ( ? , ? , ? , ? , ? , ? )"
);
stmt.setInt(1, volume_id);
stmt.setInt(2, journal_id);
stmt.setString(3, sActiveStatus);
stmt.setString(4, strTitleEng);
stmt.setString(5, Translator.Translate(strTitleEng;
stmt.setString(6, strUrl);
stmt.execute;
если sActiveStatus - это String, конечно
Только, по-моему, это не сильно должно помочь в твоей ситуации, хотя, вполне возможно, я ошибаюсь.

laki

погоди а данные в препаре низя писать чтоли?
в лом мне set делать

sasha79

Можно, а в чем смысл prepared statement'а с данными?
Все, я пошел спать

laki

запрос хочу контролировать сам

laki


ни хрена не в этом дело.
еще раз повторюсь под мускулом работает, что надо указать постгресу в пропертях коннекта.

laki

вопрос закрыт спасибо -у за помощь и тестирование

anton7805

и как проблема решилась?

laki

проблема решилась так: базу я оставил в SQLASCII, записанный туда юникод, при выводе напечать переконверчиваю в cp1251.
базу делать в utf-8 плохо тем что она здоровая и размер подрастет причем значительно.
для коннекта проперти используется вот это(именно для постгреса)

Properties propConn = new Properties;
propConn.put("useUnicode","true");
propConn.put("charSet", "utf8");
propConn.put("user", user);
propConn.put("password", pwd);
connection = DriverManager.getConnection(getJDBCURL(host, port, db propConn);

sasha79

базу делать в utf-8 плохо тем что она здоровая и размер подрастет причем значительно
Вот это все-таки интересно проверить. Мне кажется, что если хранить в базе unicode строки, то размер SQLASCII-базы будет такой же, как размер UTF8-базы, но зато UTF8 будет более "правильно".

laki

любое изменение базы со стороны клиента написанного не на джаве требует добавления конвертилки строк в геа-8, что не удобно, хотя правильно.
размер можно оценить позже.
хотя ща сделаю. и сообщу о результатах.

sasha79

Страницу надо просто выдавать тоже в UTF-8 и все. Все делать в UTF-8, и никаких конвертилок

laki

бля ну уж нет знаешь что такое верстать html в утф, у нас верстальщик заебся, просто это гиморой и причем большой.
создай хтмл страницу в юникоде сохрани блокнотом и порадуйся, что получилось

laki

вот тебе юникод

6 à 8 semaines avant le déménagement
Déterminer le jour du déménagement
Prévoir un à deux jours de congé – vous en aurez besoin.
Décidez si vous aurez besoin d'un déménageur professionnel ou si vous pourrez compter sur vos parents et amis. Prenez soins d'étudier les deux possibilités – malgré que les coûts soient plus élevés en engageant des professionnels, c'est souvent beaucoup plus simple et rapide.
Si vous optez pour engager une compagnie de déménagement, réservez dès maintenant.
Si vous optez pour le faire vous même, recrutez amis et famille.
Assurez-vous que votre déménageur possède une assurance et vérifiez auprès des responsables ce qui est assuré et quels sont les déductibles.
Vérifiez auprès de votre assureur si votre contrat d'assurance habitation couvre les dommages qui peuvent subvenir pendant le déménagement.
Faites une liste de vos objets de valeur (tableaux, bibleaux, bijoux, etc) et photographiez-les.
Donnez à votre compagnie de déménagement la liste des choses qui ne doivent pas être déménagées.
Procurez vous des boîtes si votre déménageur ne les fournit pas ou si vous déménagez vous-même.
Assurez-vous d'avoir en main; papier adhésif, papier à bulles, étiquettes et crayons feutre.
Identifiez les boîtes: Indiquez la pièce ou doivent être déposées les boîtes et apposez une liste détaillée des objets qui s'y trouvent.
Évitez de faire des boîtes trop lourdes en combinant des objets légers et lourds.
Utilisez la nourriture de votre congélateur et diminuez les réserves dans le garde-manger.

sasha79

notepad поддерживает unicode.
только он будет не utf8, как мне кажется.
наверняка, есть редакторы под windows, которые умеют редактировать файлы в utf8

sasha79

хохо, notepad поддерживает и виндовый юникод, и utf8!

laki

сверстай =) хтмл

sasha79

Не буду, я же не верстальщик. Но только я все равно не понимаю, в чем проблема-то?
Оставить комментарий
Имя или ник:
Комментарий: