Импортировать 150 картинок в базу данных за 3 минуты
Недавно я писал про базу данных с картинками. Может показаться, что занесение в ее графическое поле изображений — утомительный ручной процесс. Однако на самом деле всё сделано за считанные минуты небольшим groovy-скриптом.
Напомню, что координаты объектов на Google-картах были известны. Используя сервис статических карт нужно было оснастить записи картинками. Вот как это сделано:
Задействованный здесь метод stream2stream() я уже публиковал на Мтааламу, но, чтобы далеко не лазить, приведу еще раз:
Во избежание злоупотреблений, Google выдает за определенный небольшой промежуток времени не более 50 карт, так что скрипт пришлось запускать 3 раза с небольшими (пара минут) интервалами.
Напомню, что координаты объектов на Google-картах были известны. Используя сервис статических карт нужно было оснастить записи картинками. Вот как это сделано:
db = Sql.newInstance('jdbc:hsqldb:file:/path/to/db', 'SA', '', 'org.hsqldb.jdbc.JDBCDriver')
query = 'update name_descr_latlon set "mapimg"=? where "id"=?'
db.eachRow('select "id", "latlon" from name_descr_latlon where not ("latlon" is null) and "mapimg" is null'){ row ->
println row.id
url = new URL("http://maps.google.com/staticmap?markers=${row.latlon}&zoom=14&size=420x340")
baos = new ByteArrayOutputStream()
stream2stream(url.openStream(), baos)
ba = baos.toByteArray()
db.execute(query, [ba, row.id])
}
Задействованный здесь метод stream2stream() я уже публиковал на Мтааламу, но, чтобы далеко не лазить, приведу еще раз:
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import groovy.sql.Sql
def stream2stream = {is, os ->
src = Channels.newChannel(is);
dest = Channels.newChannel(os);
buffer = ByteBuffer.allocateDirect(16 * 1024);
while (src.read(buffer) != -1) {
buffer.flip();
dest.write(buffer);
buffer.compact();
}
buffer.flip();
while (buffer.hasRemaining())dest.write(buffer);
}
Во избежание злоупотреблений, Google выдает за определенный небольшой промежуток времени не более 50 карт, так что скрипт пришлось запускать 3 раза с небольшими (пара минут) интервалами.
- +12
- 15 марта 2011, 10:45
- 4
База данных с картинками
Понадобилось на скорую руку написать нечто вроде CMS, где главная трудность — заполнение базы данных. Операторам предстоит нудная ручная работа с адресами и телефонами организаций, о которых неизвестно ничего, кроме названия и географических координат. Появилась идея оснастить каждую запись базы данных картинкой, чтобы оператор представлял хотя бы о каком районе идет речь.
В MS-Access вставлять картинки в базу данных можно давно. Оказывается, входящая в состав пакета OpenOffice компонента для ведения баз данных ooBase тоже обладает такой возможностью.
Достаточно в таблице завести поле типа VARBINARY, а в форме сопоставить ему элемент управления «Изображение». Загрузить картинки для каждой записи базы данных можно щелкнув по элементу управления правой кнопкой и выбрав файл. А можно и автоматически, но об этом и других чудесах ooBase чуть позже.
В MS-Access вставлять картинки в базу данных можно давно. Оказывается, входящая в состав пакета OpenOffice компонента для ведения баз данных ooBase тоже обладает такой возможностью.
Достаточно в таблице завести поле типа VARBINARY, а в форме сопоставить ему элемент управления «Изображение». Загрузить картинки для каждой записи базы данных можно щелкнув по элементу управления правой кнопкой и выбрав файл. А можно и автоматически, но об этом и других чудесах ooBase чуть позже.
- +8
- 13 марта 2011, 21:39
- 1