java web 应用连接数据库的时候可以采用两种方式
1 java.sql.* DriverManager 获取数据库连接 然后使用statement preparedstatement resultset操作数据库。 这种方式存在的弊端是数据库名 用户名 密码都需要硬编码在代码中,一旦这些东西发生变化 那么整个程序需要重新编译
2 javax.sql.* 使用 DataSource的方案,这种方案采用连接池的方式,对于这样的资源 在web应用中 我们可以配置在context.xml中 这样 我们只需要查表的方式用JNDI 来获取连接池的连接,数据库名 用户名 密码的更改 只需要通过修改 context.xml 文件就可以了
context.xml可以配置在2个地方
(1)tomcat服务器 tomcat/conf/context.xml
直接在文件中加入
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost/testforjavajdbc"
username="root"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000"/>
服务器会在开启时加载资源,应用通过JNDI 可以用NAME的方式来访问资源
(2)配置在应用 webroot/META-INF下
创建context.xml 文件
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/testforjavajdbc"
username="root" password="root" >
需要注意 webapp中的文件 都要通过配置 web.xml 来实现被服务器发现,如果服务器找不到文件定义,那么可能报异常,e.g.如果只添加context.xml 不修改web.xml 那么app将会跑不起来
需要在web.xml 中需要加
jdbc/testforjavajdbc
javax.sql.DataSource
定义资源名和类型
配置完成 程序中试一下
Context ctx = new InitialContext();
DataSource ods = (DataSource) ctx
.lookup("java:comp/env/jdbc/testforjavajdbc");
// Class.forName("com.mysql.jdbc.Driver");
//
// Connection con = DriverManager.getConnection(
// "jdbc:mysql://localhost:3306/testforjavajdbc", "root",
// "root");
Connection con = ods.getConnection();
Statement sql = con.createStatement();
ResultSet rs = sql.executeQuery("select * from user");
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
rs.close();
sql.close();
con.close();
试验成功