我在Tomcat上运行Web应用程序.我有一个处理所有数据库查询的类.此类包含Connection返回查询结果的对象和方法.
这是连接对象:
private static Connection conn = null;
Run Code Online (Sandbox Code Playgroud)
它只有一个实例(单例).
另外,我有执行查询的方法,例如在db中搜索用户:
public static ResultSet searchUser(String user, String pass) throws SQLException
Run Code Online (Sandbox Code Playgroud)
此方法使用静态Connection对象.我的问题是,我在静态Connection对象线程中的使用是否安全?或者当很多用户调用该searchUser方法时会引起问题吗?
混淆使用JSF2 + Spring + EJB3或它们的任意组合让我感到有些困惑.我知道Spring的一个主要特性是依赖注入,但是我可以使用JSF托管bean @ManagedBean和@ManagedPropertyanotations,并获得依赖注入功能.使用EJB3,我更加困惑何时将其与JSF一起使用,或者甚至有理由使用它.
那么,在什么样的情况下使用Spring + JSF2或EJB3 + JSF2是个好主意?
到目前为止,我只使用JSF2创建了一些小型Web应用程序,从不需要使用Spring或EJB3.但是,我在许多地方看到人们正在将所有这些东西放在一起.
我试图确定我是否实际使用JDBC连接池.经过一些研究,实施几乎看起来太容易了.事实上比常规连接更容易,所以我想验证.
这是我的连接类:
public class DatabaseConnection {
Connection conn = null;
public Connection getConnection() {
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jdbc:mysql://localhost:3306/data");
bds.setUsername("USERNAME");
bds.setPassword("PASSWORD");
try{
System.out.println("Attempting Database Connection");
conn = bds.getConnection();
System.out.println("Connected Successfully");
}catch(SQLException e){
System.out.println("Caught SQL Exception: " + e);
}
return conn;
}
public void closeConnection() throws SQLException {
conn.close();
}
Run Code Online (Sandbox Code Playgroud)
}
这是真正的连接汇集吗?我在另一个类中使用连接如下:
//Check data against database.
DatabaseConnection dbConn = new DatabaseConnection();
Connection conn;
ResultSet rs;
PreparedStatement prepStmt;
//Query database and check username/pass against table.
try{
conn = dbConn.getConnection(); …Run Code Online (Sandbox Code Playgroud) 我有一个外部MySQL服务器,设置和工作正常.我在Eclipse中创建了一个数据库连接,可以在Data Source Explorer选项卡中查看数据库.
现在,我有一个需要访问该数据库的servlet.我该怎么做?有没有办法引用在数据源资源管理器中创建的数据库连接,还是我必须两次定义所有内容?
另外,打开连接的最佳方法是什么?我已经mysql-connector-java-5.1.11-bin.jar包含了该文件,并且我发现了两种有效的方法:
MysqlDataSource d = new MysqlDataSource();
d.setUser("user");
d.setPassword("pass");
d.setServerName("hostname.com");
d.setDatabaseName("db");
Connection c = d.getConnection();
Run Code Online (Sandbox Code Playgroud)
和
Connection c = DriverManager.getConnection("jdbc:mysql://hostname.com/db","user","pass");
Run Code Online (Sandbox Code Playgroud)
两者都不是最佳的,因为首先,它们都使用硬编码的字符串.这是一个Java EE Web应用程序项目,是否有一个放置连接数据的好地方?或者有没有办法放弃所有这些并只使用数据源资源管理器中的连接?