Как я могу установить изображение в седьмом столбце? - PullRequest
0 голосов
/ 15 декабря 2009

У меня есть таблица sql, которая имеет 7 столбцов и первые шесть столбцов, тип хранения строки, но последний тип хранения BLOB. Я получаю эти 6 типов строк с помощью метода addBirth и для хранения изображения для последнего столбца, я использую метод insertImageToBirthTable. Я хочу хранить строки и BLOB не вместе, потому что пользователь может не выбрать фотографию для добавления человека. (Я отредактировал свой пост, и теперь я использую этот метод для сохранения своего изображения, но в таблице SQL он по-прежнему имеет нулевое значение, почему ???) Также я напечатал pathfile, и он не был нулевым.

мой метод insertImageToBirthTable:

public static void insertImageToBirthTable (имя строки, семейство строк, имя_строки отца, имя_строки строки, дата строкиOfBirth, строка placeOfBirth, строка pathFile) {

try {
    System.out.println(pathFile);
    File file = new File(pathFile);
    FileInputStream input = new FileInputStream(file);
    PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("UPDATE birthtable SET image =? WHERE name = '" + name + "'AND family ='" + family + "'AND fatherName = '" + fatherName + "'AND motherName ='" + motherName + "' AND dateOfBirth = '" + dateOfBirth + "' AND placeOfBirth = '" + placeOfBirth + "'");
    stmt.setBinaryStream(1, input);
    stmt.executeUpdate();


} catch (Exception e) {
    e.printStackTrace();
}

}

Ответы [ 3 ]

3 голосов
/ 15 декабря 2009

Чтение сообщения об исключении показывает:

Не указано значение для параметра 1

Так ... мне нужно объяснить это тебе? (Совет: вам нужно указать значения для всех параметров в вашем PreparedStatement. Одно значение не подойдет.)

1 голос
/ 15 декабря 2009

Если вы хотите добавить изображение позже, вам нужен «первичный ключ» в вашей таблице. Первичный ключ дает вам простой способ идентифицировать конкретный столбец. Добавьте такой столбец в свою таблицу:

ID serial,

Пропустить этот столбец во время вставки и выполнить этот запрос после вставки, чтобы узнать первичный ключ вашего нового столбца:

SELECT @@IDENTITY

Позже, когда вы наконец получите образ, запустите это обновление:

update set imageBlob = ? where ID = ?

Используйте ваш InputStream для первого параметра и первичный ключ для второго.

[РЕДАКТИРОВАТЬ] См. на этой странице для полного примера, как вставить изображение в таблицу.

0 голосов
/ 15 декабря 2009

Вы получаете исключение, потому что вам нужно предоставить все параметры, которые есть в вашем sql (все знаки вопроса).

Если вам нужно только предоставить столбец imageBlob (я предполагаю, что вы его вызывали), в то время как по умолчанию все остальные столбцы вы можете назвать столбцы, для которых вы хотите указать значения в вашем sql, попробуйте это

query = ("insert into birthtable (imageBlob) VALUES (?)");

Хотя обновление здесь звучит более уместно, чем вставка, другой вариант - включить его в вашу или основную вставку и указать значение NULL для этого столбца, когда изображение отсутствует.

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