Страницы

Поиск по вопросам

пятница, 21 июня 2019 г.

Вывод данных из базы в динамическую таблицу

Имеется вот такая примерно таблица -
#{msgs.pageTitle} #{msgs.customerIdHeader} #{customer.id} #{msgs.NDOKHeader} #{customer.NDOK} #{msgs.SODRABHeader} #{customer.SODRAB}
Как написать правильный код с использованием jdbc, который бы подключался к базе и получал данные, а затем они попадали в данную таблицу?


Ответ

1) Для подключения к MSSQL вам поднадобится соответствующий драйвер. В Maven Central его нету, поэтому вам будет нужно самостоятельно добыть внутри каталога установки драйвера:
\sqljdbc_\\sqljdbc.jar \sqljdbc_\\sqljdbc4.jar \sqljdbc_\\sqljdbc41.jar \sqljdbc_\\sqljdbc42.jar
согласно документации Microsoft
Скачать драйвер можно с сайта Microsoft
(Поясню на всякий случай: installation directory не надо никуда прописывать - это просто путь до драйвера при обычной установке из инсталлятора. Если у вас уже все скачано, достаточно добавить драйвер в CLASSPATH.)
Далее этот драйвер нужно добавить в CLASSPATH любым методом, специфичным для вашего проекта. Например, если вы собираете вручную из консоли, то это будет нечто вроде:
CLASSPATH =.;C:\Program Files\Microsoft JDBC Driver 6.0 for SQL Server\sqljdbc_4.2\enu\sqljdbc42.jar
CLASSPATH =.:/home/usr1/mssqlserverjdbc/Driver/sqljdbc_4.2/enu/sqljdbc42.jar
Если вы используете IntelliJ IDEA, то это делается так:
нужно зайти в настройки проекта (File->Project Structure) в разделе Modules найти ваш модуль на вкладке Dependencies в самом низу нажать на плюсик выбрать "JARs or Directories" добавить нужную директорию
Если используется Maven, то есть проблема, в Maven Central нету этого артефакта, то есть его придется оформить самостоятельно.
Для серьезных больших проектов, самый правильный способ - поднять собственный репозиторий. На выбор, например, есть Artifactory и Nexus. Как работать с этими инструментами - описывать слишком долго, не влезет в максимальный размер ответа. Скорей всего, у вас не тот случай, но я был обязан предупредить.
Для небольших проектов, можно установить нужный jar в локальный репозиторий Maven. Про это на сайте Maven есть специальная документация. Вкратце, достаточно просто запустить в терминале строчку:
mvn install:install-file -Dfile=<путь до джарки с жрайвером без угловых скобочек> -DgroupId=com.microsoft.sqlserver \ -DartifactId=com.microsoft.sqlserver.jdbc.SQLServerDriver -Dversion=4.2 -Dpackaging=jar
и далее добавить в pom.xml новую зависимость вида:
com.microsoft.sqlserver com.microsoft.sqlserver.jdbc.SQLServerDriver 4.2
В общем, добавление новой джарки с сборку проекта очень зависит от характеристик вашего проекта, способов сборки, деплоймента, итп. Тут все каждый решает для себя.
2) Далее у нас есть допустим Entity класс:
public class Customer {
private Integer id; private String NDOK; private String SODRAB;
public Customer() { }
public Customer(Integer id, String NDOK, String SODRAB) { this.id = id; this.NDOK = NDOK; this.SODRAB = SODRAB; }
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getNDOK() { return NDOK; }
public void setNDOK(String NDOK) { this.NDOK = NDOK; }
public String getSODRAB() { return SODRAB; }
public void setSODRAB(String SODRAB) { this.SODRAB = SODRAB; } }
3) Далее создаем managed bean:
import java.io.Serializable; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped;
@ManagedBean @SessionScoped public class CustomerBean implements Serializable {
private static final long serialVersionUID = 6081417964063918994L;
public List getCustomers() throws ClassNotFoundException, SQLException {
Connection connect = null;
//Привел пример, как указать еще и в url, это необязательно String url = "jdbc:sqlserver://localhost:1433;" + "databaseName=CustomerDatabase;user=user;password=password";
String username = "user"; String password = "password";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connect = DriverManager.getConnection(url, username, password); // System.out.println("Connection established"+connect);
} catch (SQLException ex) { System.out.println("in exec"); System.out.println(ex.getMessage()); }
List customers = new ArrayList(); PreparedStatement pstmt = connect .prepareStatement("select id, NDOK, SODRAB from Customer"); ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
Customer customer = new Customer(); customer.setId(rs.getInt("id")); customer.setNDOK(rs.getString("NDOK")); customer.setSODRAB(rs.getString("SODRAB"));
customers.add(customer);
}
// close resources rs.close(); pstmt.close(); connect.close();
return customers;
}
}
4) Передаете данные в таблицу способом, описанным в стартовом посте.
5) PROFIT

Комментариев нет:

Отправить комментарий