Несколько лет назад при разработке одного крупного проекта на PHP, который только и делал что писал, читал и обновлял тонны данных в SQL, я решил написать для этого проекта конструктор SQL-запросов, который тогда сильно облегчил мне жизнь и по сей день помогает мне и мои коллегам в ежедневной работе. Дело в том, что выложить этот конструктор в общественный доступ я не могу, так как проект принадлежит не мне, да и сильно завязан этот конструктор на наш фреймворк.
В связи с чем я решил разработать его аналог на Java: https://github.com/r0ck3r/IQL
Документация доступна там же, а вот некоторые примеры использования:
Connection con = DriverManager.getConnection("jdbc:mysql://server/database", properties);
Вставка данных:
IQL iql = new IQL(con);
iql.addTable("mytable");
iql.setInsertRows("name %s", "register_date %d", "level %i");
iql.insert("User1", "17.05.2017", 4);
iql.insert("User2", "12.03.2016", 5);
Statement st = iql.getStatement();
Сгенерирует следующее:
INSERT INTO `mytable`(`name`, `register_date`, `level`) VALUES ('User1', 1494968400, 4), ('User2', 1457730000, 5)
Обновление данных:
IQL iql = new IQL(con);
iql.addTable("organisations");
iql.setUpdateRows("name %s", "address %s");
iql.update("New orgname", "New address");
iql.whereId(112);
PreparedStatement ps = iql.getStatement();
UPDATE `organisations` SET `name` = 'New orgname', `address` = 'New address' WHERE `organisations`.`id` = 112
Пример выборки:
IQL iql = new IQL(con);
iql.addTable("domains").select("subdomain subdomain", "domain domain").where("domain %s", IQL.ISNTNULL);
iql.addTable("orgs").select("org_name name", "org_address address").where("org_name %s", IQL.LIKE, "%организация%");
iql.join(2, "id", 1, "org_id"); //присоединить к таблице №2 (orgs) таблицу №1 domains по полям id из orgs к org_id из domains
String SQL = iql.getSQL();
Создаст следующий SQL-код:
SELECT
`domains`.`subdomain` AS `subdomain`,
`domains`.`domain` AS `domain`,
`orgs`.`org_name` AS `name`,
`orgs`.`org_address` AS `address`
FROM `orgs`
JOIN `domains` ON `orgs`.`id` = `domains`.`org_id`
WHERE
`domains`.`domain` IS NOT NULL AND
`orgs`.`org_name` LIKE '%организация%'
В общем, кому надо - используйте