#java
#java
Вопрос:
У меня есть один класс сущностей, в котором есть определенные атрибуты tables . Объект этого класса будет заполнен в вспомогательном классе значениями атрибутов . Теперь мне нужен метод, который будет динамически создавать оператор SQL-запроса (отдельный частный метод), запрашивать таблицу (отдельный частный метод) для всех совпадающих строк, сопоставлять выходные результаты (отдельный частный метод) со списком объектов AuditBO
Комментарии:
1. В чем ваш вопрос? Пожалуйста, покажите нам, что вы сделали до сих пор и в каких конкретных задачах вы работаете.
2. Возможно, здесь может помочь какой-то ORM, например, использование Hibernate. Это позволяет вам запрашивать вашу модель.
3. Или, если вам нужны более читаемые операторы и меньше строковой акробатики, вы можете заглянуть в QueryDSL. querydsl.com
Ответ №1:
Надеюсь, это будет полезно.
Когда Table
класс инициализируется, все входные значения будут инициализированы. При getSelectQuery
вызове метода на основе входных данных будет сформирован запрос select. И populatePreparedSt
будет вызван для установки PreparedStatement . Наконец, на основе входных данных, которые вы задаете в constructor of Table
, вы получите запрос и результат.
Класс таблицы:
public class TableRow {
private String attibute1;
private String attibute2;
private int id;
// getter and setters
public final String selectQuery = " SELECT ID, ATTIBUTE1, ATTIBUTE2 FROM TABLEROW ";
public CECardLogRow(int id, String attibute1, String attibute2) {
this.id = id;
this.attibute1 = attibute1;
this.attibute2 = attibute2;
}
public String getSelectQuery () {
StringBuilder sql = new StringBuilder();
boolean whereClauseAdded = false;
sql = sql.append(selectQuery);
if (id > -1) {
sql.append(" WHERE ID = ? ");
whereClauseCt ;
}
if (attibute1 != null amp;amp; attibute1.trim() != "") {
sql.append(whereClauseAdded ? " AND " : " WHERE ");
sql.append(" ATTIBUTE1 = ? ");
}
if (attibute2 != null amp;amp; attibute2.trim() != "") {
sql.append(whereClauseAdded ? " AND " : " WHERE ");
sql.append(" ATTIBUTE2 = ? ");
}
return sql.toString();
}
public void populatePreparedSt (PreparedStatement ps) {
int i = 1;
if (id > -1) {
ps.setInt(i , id);
}
if (attibute1 != null amp;amp; attibute1.trim() != "") {
ps.setString(i , attibute1);
}
if (attibute2 != null amp;amp; attibute2.trim() != "") {
ps.setString(i , attibute2);
}
}
}
Вызывающий метод:
public List<TableRow> getData (int id, String attibute1, String attibute2) {
List<TableRow> rows = new ArrayList<TableRow>();
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
TableRow row = new TableRow(id, attibute1, attibute2);
String sql = row.getSelectQuery();
con = global.getConnection(); // get connection
ps = con.prepareStatement(sql);
row.populatePreparedSt(ps);
rs = ps.executeQuery();
while (rs.next()) {
TableRow row = new TableRow();
// get data
row.setId(rs.getInt("ID"));// and so on
rows.add(tableRow);
}
} catch (SQLException sqe) {
throw sqe;
} finally() {
// closeConnection
}
return rows;
}
Комментарии:
1. Я думаю, люди, вы меня неправильно поняли. Я создал класс сущности как EntityBo . В этом классе будут все поля таблиц . Теперь у меня будет еще один вспомогательный класс, который будет заполнять поля в классе EntityBo . Теперь я также заполнил этот класс сущностей. После этого в вспомогательном классе нам нужен метод, который будет динамически создавать sql-запрос. Итак, в основном я застрял здесь, чтобы создать метод, который будет динамически создавать запрос на основе заполненных входных атрибутов.
2. Запрос будет примерно таким: — ВЫБЕРИТЕ * из CCMS.USER_ACT_AUDIT, где CLIENT_ID = ‘GUI’ И USER_ID = ‘pagi@yahoo.co.in ’ И ACTION = ‘Поисковые группы’ с ur . Атрибуты, упомянутые в запросе здесь, будут заполнены в классе entity, и на основе этих атрибутов запрос будет выполнен динамически . Итак, мне просто нужен метод для динамического построения запроса.
3. Разве вы не видите, что запрос строится динамически на основе входных данных?
4. Может ли кто-нибудь объяснить полезность метода populatePreparedSt()
5. Обновленный ответ с объяснением.