Запретить jdbc от заполнения строк при вставке и обновлении sql - PullRequest
1 голос
/ 28 февраля 2009

Мы используем мост jdbc-odbc для подключения к базе данных MS SQL. При выполнении вставок или обновлений строки помещаются в базу данных, дополненную до длины поля базы данных. Есть ли способ отключить это поведение (строки должны идти в таблицу без заполнения)?

Для справки, мы можем вставить значения полей, которые не содержат заполнение, используя инструменты управления SQL и анализатор запросов, поэтому я почти уверен, что это происходит на уровне jdbc или odbc.

РЕДАКТИРОВАТЬ: поля в базе данных перечислены как nvarchar (X), где X = 50, 255, что угодно

РЕДАКТИРОВАТЬ 2: вызов для вставки использует подготовленный оператор, как:

PreparedStatement stmt = new con.prepareStatement("INSERT INTO....");
stmt.setString(1, "somevalue");

Ответы [ 4 ]

5 голосов
/ 28 февраля 2009

Как вы устанавливаете строку? Вы делаете?:

PreparedStatement stmt = new con.prepareStatement("INSERT INTO....");
stmt.setString(1, "somevalue");

Если так, попробуйте это:

stmt.setObject(1, "somevalue", Types.VARCHAR);

Опять же, это просто догадка, не видя, как вы вставляете.

1 голос
/ 28 февраля 2009

Если вы можете заставить вашу вставку работать с обычными инструментами SQL (например ... Я не знаю, Toad для MS SQL Sever или что-то в этом роде), тогда следует сменить драйвер.

Используйте драйвер Microsoft SQL Server JDBC типа IV.

Дайте эту ссылку попробовать

http://www.microsoft.com/downloads/details.aspx?familyid=F914793A-6FB4-475F-9537-B8FCB776BEFD&displaylang=en

К сожалению, такие загрузки идут с большим количеством мусора. Там есть инструмент для установки и еще сотни файлов. Просто найдите что-то вроде:

intalldir \ lib \ someSingle.jar

Скопируйте куда-нибудь еще и удалите / удалите остальные.

Я сделал это пару месяцев назад, к сожалению, я не помню точно, где это было.

РЕДАКТИРОВАТЬ

Хорошо, я понял.

Нажмите на загрузку и в конце страницы нажмите «Я согласен и хочу загрузить версию UNIX»

Это обычный сжатый файл (используйте win rar или другой) и найдите этот sigle jar.

Это должно сработать.

1 голос
/ 28 февраля 2009

Используете ли вы поля CHAR в базе данных или VARCHAR?

CHAR дополняет размер поля. VARCHAR нет.

Я не думаю, что JDBC будет причиной этого.

0 голосов
/ 28 февраля 2009

Если вы используете прилагаемый драйвер Sun JDBC-ODBC Bridge, вы можете подумать о переходе на правильный драйвер MS SQL JDBC. Sun не рекомендует использовать драйвер моста в производственной среде.

Драйвер JDBC-ODBC Bridge рекомендуется только для экспериментального использования или когда нет другой альтернативы.

Переход к более целенаправленному драйверу может решить вашу проблему в целом или, по крайней мере, он предоставит готовое к работе решение, когда вы исправите ошибку.

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