一、Tomcat与Mysql连接
我从事的项目是中小型的网站,使用的服务器是Tomcat,数据库是Mysql。Tomcat的版本是5.0.28,Mysql的版本是5.0.22,JDK版本是1.4.2.14。注意,在构架网站时,各个软件的版本是非常重要的,在这上面我就吃了不少苦头,这恐怕是每位初学者肯定会碰到的问题和应付的代价。在文章中我也会将我在版本上遇到的问题与解决方案加以说明。
网站的开发,在需求分析完成后,就是数据库的设计,数据库表单与字段设计不是我今天要讨论的问题。我们的焦点集中在如何使我们的数据库使用方便,更健壮。
1、安装
这个环境很简单,在网上google一下就可以找到各种版本安装手册与要点。
step1:安装j2sdk-1.4.2.14
step2:安装Tomcat5.0.28
step3:安装Mysql5.0.22
step4:安装mysql-connector-java-5.0.4-bin.jar到TOMCAT\common\lib
step5:设置环境变量
安装完毕,可以开工了:)
2、获得数据库
“获得链接” 对于初学者来说,应该不是什么难事,网上大量的入门文章都给出了简单而直观的方法,如在jsp文件中插入java代码如下:
String server = "127.0.0.1"; // Can't use localhost , you must use IP or CNAME
String port = "3306"; //change to your port
String db = "publish"; //change to your db name
String user = "root"; //change to your username
String pass = "123456"; //change to your password
String URL="jdbc:mysql://"+server+":"+port+"/"+db+"?useUnicode=true&characterEncoding=GBK&user="+user+"&password="+pass;
其中conn就是数据库链接。但是这样的代码在项目中使用却是一个灾难,使用用户名、密码、服务器名等信息散布在程序的各个角落,这是让维护代码的工程师想想就崩溃的事情。
显然关于用户名、密码、服务器名等信息应该在配置文件中,在配置文件修改后,服务器重新发布就可以生效了,而不再需要程序员的干涉。
在我的项目中我的配置文件内容如下:
<Context path="/ProServer" reloadable="true" >
<Resource name="jdbc/database" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" password="123456" maxIdle="10" maxWait="10000" username="user" url="jdbc:mysql://localhost:3306/dbname?autoReconnect=true&useUnicode=true&characterEncoding=utf8" maxActive="50" removeAbandoned = "true" removeAbandonedTimeout="300" logAbandoned = "false"/>
<Resource auth="Container" description="DB Connection" name="jdbc/database" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/database">
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8</value>
</parameter>
<parameter>
<name>password</name>
<value>12345678</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>5</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
</ResourceParams>
</Context>
在配置文件中,我们可以看到有两个<Resource>这是分别针对Tomcat5.5(第一个)和Tomcat5.0(第二个)进行设置。其中<name>maxActive</name>表示Mysql的最大链接数,如果超过该链接数,程序将无法获得链接。
有了配置文件,我们设计一个类对其进行分析:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class Comm ...{
private static Context initialContext;
private static DataSource dataSource;

public static Context getInitialContext() throws NamingException ...{
if (initialContext == null) ...{
initialContext = new InitialContext();
}
return initialContext;
}

public static DataSource getDataSource() throws NamingException...{
if(dataSource == null)...{
Context ctx = getInitialContext();
dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/dbname");
}
return dataSource;
}
}这样,我们通过调用Comm中的静态方法getDataSource()就可以得到数据源。在这之后,我们就可以设计正对数据库进行操作的类了,如下所示:
import java.sql.*;
import javax.sql.DataSource;
import Comm;

public class dbconn ...{
public dbconn()...{}
//declare variable
private DataSource ds;
private Connection conn = null;
private ResultSet rs = null;

public Connection getConn()...{ //get database connection
try...{
ds = DreyeComm.getDataSource();
conn = ds.getConnection();
}
catch(Exception e)...{
e.printStackTrace();
}
return conn ;
}

public void destroyConn()...{
try...{
conn.close();
}
catch(Exception e)...{
e.printStackTrace();
}
}

public ResultSet executeSQL(String str) ...{
try...{
Statement stmt = conn.createStatement(); //语句接口
rs = stmt.executeQuery(str); //获得结果集
}
catch(Exception e)...{
e.printStackTrace();
}
return rs;
}

public void updateSQL(String str)...{
try...{
Statement stmt = conn.createStatement(); //语句接口
stmt.executeUpdate(str); //获得结果
}
catch(Exception e)...{
e.printStackTrace();
}
}
}从代码中我们可以,使用dbconn类,我们可以轻松的实现数据库的各种操作。
3、总结
上面我们给出了在Tomcat中链接Mysql较好的一种解决方案,使用这种方式进行中小型网站的数据库开发是相对合适的。最后,在开发中还有一些注意事项: