Хорошо, я пытаюсь настроить пул соединений в веб-приложении Vaadin, и я слышал, что лучше заставить Tomcat выполнять пул соединений. Итак, я просмотрел несколько видеороликов на Youtube и множество руководств, и я слишком плохо разбираюсь в этом, чтобы заставить его работать. Мне очень нужен кто-то, чтобы помочь.
Должен ли SQL-сервер находиться на моем компьютере? Может на другом сервере?
Допустим, у меня есть БД:
И я хочу получить доступ к таблице в DB2 с именем Table1. Итак, согласно этому я должен перейдите в server.xml в ECLIPSE.
и добавить
<Resource name="jdbc/ServerName"
auth="Container"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
type="javax.sql.DataSource"
maxActive="50"
maxIdle="10"
maxWait="15000"
username="username"
password="password"
url="jdbc:sqlserver://ServerName;instance=SQLEXPRESS;databaseName=DB2;"
removeAbandoned="true"
removeAbandonedTimeout="30"
logAbandoned="true" />
Но, по словам этого парня, это должен быть в Context.xml (я пробовал только context.xml, я пробовал только Server.xml и пробовал использовать этот код ресурса в обоих). Я ДУМАЮ, что он спрашивает для META-INF > Context.xml в моем веб-приложении Vaadin, которое я не могу найти. Это единственная папка Meta-Inf, которая у меня есть, и когда я создаю здесь файл context.xml, он просто исчезает, когда я пытаюсь его скомпилировать.
В любом случае, пытаясь продолжить обучение, мне нужно добавить драйверы в мою папку Tomcat>Lib, поэтому я загружаю все эти драйверы и добавьте их.
На всякий случай, потому что некоторые люди используют драйвер JDBC. загрузите его и добавьте в мой Tomcat > Lib.
Следуя этим заметкам от парня, который настроил пул подключений для работы в своей программе Vaadin , я добавляю это в свой код Java:
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
BasicDataSource ds = (BasicDataSource)ctx.lookup("jdbc/ServerName");
con = ds.getConnection();
String sql = "select * from DB2.dbo.Table1 where [Field1] IS NULL";
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
//Add in all info
while (rs.next()){
beanResultsList.addBean(new Bean(
rs.getInt(1),
rs.getString(2),
rs.getString(3),
rs.getDate(4),
rs.getDate(5),
rs.getInt(6),
rs.getInt(7),
rs.getInt(8),
rs.getInt(9),
rs.getString(10),
rs.getString(11),
rs.getString(12),
rs.getString(13)
));
}
} catch (SQLException | NamingException e) {
e.printStackTrace();
}finally{
try { con.close(); } catch (SQLException e) {}
try { rs.close(); } catch (SQLException | NullPointerException e) {}
try { stmt.close(); } catch (SQLException e) {}
} // End finally (try catch)
Когда я запускаю, я получаю NullPointerException в con.close() в блоке finally, потому что он не извлекает таблицу. Или, во-первых, у меня нет связи.
Я честно понятия не имею, что я делаю. Я не знаю, возможно ли подключиться к серверу sql, если он не работает с моего компьютера? Каждый пример, который я вижу, использует Localhost.
Редактировать: Для справки: следующий код работает 100% БЕЗ ПРОБЛЕМ, но я не могу заставить работать указанный выше пул соединений.
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection("jdbc:jtds:sqlserver://ServerName;instance=SQLEXPRESS","username","password");
String sql = "select * from DB2.dbo.Table1 where [Field1] IS NULL";
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
//Add in all info
while (rs.next()){
beanResultsList.addBean(new Bean(
rs.getInt(1),
rs.getString(2),
rs.getString(3),
rs.getDate(4),
rs.getDate(5),
rs.getInt(6),
rs.getInt(7),
rs.getInt(8),
rs.getInt(9),
rs.getString(10),
rs.getString(11),
rs.getString(12),
rs.getString(13)
));
}
} catch (SQLException | NamingException e) {
e.printStackTrace();
}finally{
try { con.close(); } catch (SQLException e) {}
try { rs.close(); } catch (SQLException | NullPointerException e) {}
try { stmt.close(); } catch (SQLException e) {}
} // End finally (try catch)