好的我正在尝试在Vaadin webapp中设置连接池,我听说最好让Tomcat进行连接池。所以我 我正在浏览一些Youtube视频和大量的教程,我对此非常不满意。我真的需要有人帮忙。
SQL服务器必须在我的计算机上吗?它可以在不同的服务器上吗?
假设我有一个db:
我想访问名为Table1的DB2中的表。所以根据this,我必须在ECLIPSE中进入 server.xml 。
并添加
//
self.setPhysics()
let animation = SKAction.animate(with: textures, timePerFrame: 0.15, resize: true, restore: false)
let interceptor = SKAction.animateWithDynamicPhysicsBody(animate: animation, key: "knight", textures: textures, duration: 60.0, launchMethod: self.setPhysics)
knight.run(interceptor,withKey:"knight")
}
func setPhysics() {
knight.physicsBody = SKPhysicsBody.init(rectangleOf: knight.size)
knight.physicsBody?.isDynamic = false
}
但根据 this guy, 它应该在 Context.xml 中(我只尝试过context.xml,我只尝试过服务器。 xml和我已经尝试过这两种资源代码。)我认为它要求 META-INF>我的Vaadin webapp中的Context.xml ,我找不到。这是我唯一的Meta-Inf文件夹,当我在这里创建一个context.xml文件时,当我尝试编译它时它就会消失。
无论如何,尝试继续学习本教程,我需要将驱动程序添加到我的Tomcat> Lib文件夹中,以便我下载所有these drivers并添加它们。
只是为了好好衡量,因为其他人正在使用JDBC driver我下载并将其添加到我的Tomcat>也是自由。
在一个让连接池在他的Vaadin程序中工作的人these notes之后,我在我的java代码中添加了这个:
<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" />
当我运行时,我在finally块中的 con.close()处得到NullPointerException,因为它没有拉表。或者,我首先没有连接。
老实说,我不知道自己在做什么。如果它没有从我的计算机上运行,我不知道是否可以连接到sql server?我看到的每个例子都使用Localhost。
编辑:作为参考,以下代码可以正常运行100%ZERO PROBLEMS,但我无法让上面的连接池工作。
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)
答案 0 :(得分:1)
我建议你慢下来。这个问题是几个问题的组合。只关注一个问题,找到答案,并在看到它们如何适合时将各个部分放在一起。
首先,&#34; SQL服务器必须在我的计算机上吗?它可以在不同的服务器上吗?&#34;。它可以在不同的服务器上,只要您具有网络访问权限。
其次,&#34;无论如何,尝试继续学习本教程,我需要将驱动程序添加到我的Tomcat&gt; Lib文件夹中,以便下载所有这些驱动程序并添加它们。&#34; &#34;这些司机&#34;你指的是JDBC驱动程序。如果您要连接到Microsoft SQL Server,那么额外的JDBC&#39;你指的驱动程序对你没用,因为它们是MySQL JDBC驱动程序(与SQL Server完全不同的数据库)。
第三,你显然正在使用Maven,当你添加一个META-INF文件夹和一个context.xml时,它会被删除,因为&#39; target&#39;运行Maven构建时,将重建Maven项目中的文件夹。您需要将META-INF文件夹添加到/ src / main / webapp /文件夹。然后,context.xml文件将在构建时复制到您最初尝试放置它的位置并期望它保留。
答案 1 :(得分:1)
我认为定义JNDI数据源的正确位置在server.xml中,并在context.xml中有一个引用,请参阅此答案Tomcat JNDI resource name aliases