java使用数据库连接池

连接池的实现方式是首先使用JNDI(JavaTM Naming and Directory Interface) 将数据源对象注册为一个命名服务,然后使用JNDI提供的服务接口,按照名称检索对应的数据源。

查找数据源的方法:
1、创建一个命名服务环境(Context)。
2、利用该环境对象的lookup方法按名查询,得到相应数据源对象。
3、调用数据源对象的getConnection方法获取与数据库的连接。

第一步:Tomcat 安装目录下的confcontext.xml <Context></Context>中添加代码:

修改context.xml文件加入如下代码:

 

<Context>
  <Resource
    name="jdbc/cartds"
    type="javax.sql.DataSource"
    password=""
    driverClassName="com.mysql.jdbc.Driver"
    maxIdle="20"
    maxWait="5000"
    username="root"
    url="jdbc:mysql://localhost:3306/logistic"
   />
</Context>

 

第二步:

将相关的数据库驱动程序放置在项目中lib文件夹中。例如:库包中mysql包,并加入 libraries

第三步

配置 web.xml 文件
<!-- JNDI -->
  <resource-ref>
    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/cartds</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>

红色字体与 Java 文件中的必需一致,编译时时通过这些描述符来实现映射
java:comp/env/jdbc/DBPool(虚地址) ------> 映射描述符 ------> jdbc/DBPool(实际的地址)

 第四步

创建 DBcart.java

package zyw;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Vector;

public class DBcart
{
//定义每页显示商品的数量
private static int span=2;

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> getSpan()
{
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> span;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> setSpan(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> i)
{
    span </span>=<span style="color: rgba(0, 0, 0, 1)"> i;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> Vector&lt;String&gt;<span style="color: rgba(0, 0, 0, 1)"> getInfo(String sql)
{
    Vector</span>&lt;String&gt; vclass = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector&lt;String&gt;<span style="color: rgba(0, 0, 0, 1)">();
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行语句得到结果集</span>
        ResultSet rs =<span style="color: rgba(0, 0, 0, 1)"> st.executeQuery(sql);
        </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)">(rs.next())
        {
            String str </span>= rs.getString(<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
            str </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> String(str.getBytes(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISO-8859-1</span><span style="color: rgba(128, 0, 0, 1)">"</span>),<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gb2312</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            vclass.add(str);
        }
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭结果集,语句</span>

rs.close();
st.close();
//归还连接
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return vclass;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> boolean isLegal(String sql)
{
    boolean flag </span>= <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行语句得到结果集</span>
        ResultSet rs =<span style="color: rgba(0, 0, 0, 1)"> st.executeQuery(sql);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(rs.next())
        {
            flag </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
        }
        rs.close();
        st.close();
        con.close();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">(Exception e)
    {
        e.printStackTrace();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> flag;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> getID(String tname,String colname)
{
    </span><span style="color: rgba(0, 0, 255, 1)">int</span> id = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        String sql </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">select Max(</span><span style="color: rgba(128, 0, 0, 1)">"</span>+colname+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">) from </span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">tname;
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行语句得到结果集</span>
        ResultSet rs =<span style="color: rgba(0, 0, 0, 1)"> st.executeQuery(sql);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(rs.next())
        {
            id </span>= rs.getInt(<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
        }
        id</span>++<span style="color: rgba(0, 0, 0, 1)">;
        rs.close();
        st.close();
        con.close();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">(Exception e)
    {
        e.printStackTrace();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> id;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> updateTable(String sql)
{
    </span><span style="color: rgba(0, 0, 255, 1)">int</span> i = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">更新表</span>
        i =<span style="color: rgba(0, 0, 0, 1)"> st.executeUpdate(sql);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭语句</span>

st.close();
//归还连接
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return i;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> Vector&lt;String[]&gt;<span style="color: rgba(0, 0, 0, 1)"> getInfoArr(String sql)
{
    Vector</span>&lt;String[]&gt; vtemp = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector&lt;String[]&gt;<span style="color: rgba(0, 0, 0, 1)">();
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行语句得到结果集</span>
        ResultSet rs =<span style="color: rgba(0, 0, 0, 1)"> st.executeQuery(sql);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取结果集的元数据</span>
        ResultSetMetaData rsmt =<span style="color: rgba(0, 0, 0, 1)"> rs.getMetaData();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到结果集中的总列数</span>
        <span style="color: rgba(0, 0, 255, 1)">int</span> count =<span style="color: rgba(0, 0, 0, 1)"> rsmt.getColumnCount();
        </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)">(rs.next())
        {
            String[] str </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> String[count];
            </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">int</span> i=<span style="color: rgba(128, 0, 128, 1)">0</span>;i&lt;count;i++<span style="color: rgba(0, 0, 0, 1)">)
            {
                str[i] </span>= rs.getString(i+<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
                str[i] </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> String(str[i].getBytes(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISO-8859-1</span><span style="color: rgba(128, 0, 0, 1)">"</span>),<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gb2312</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            }
            vtemp.add(str);
        }
        rs.close();
        st.close();
        con.close();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">(Exception e)
    {
        e.printStackTrace();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> vtemp;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> getTotalPage(String sql)
{
    </span><span style="color: rgba(0, 0, 255, 1)">int</span> totalpage = <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行语句得到结果集</span>
        ResultSet rs =<span style="color: rgba(0, 0, 0, 1)"> st.executeQuery(sql);
        rs.next();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到总记录条数</span>
        <span style="color: rgba(0, 0, 255, 1)">int</span> rows = rs.getInt(<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
        totalpage </span>= rows/<span style="color: rgba(0, 0, 0, 1)">span;
        </span><span style="color: rgba(0, 0, 255, 1)">if</span>(rows%span!=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">)
        {
            totalpage</span>++<span style="color: rgba(0, 0, 0, 1)">;
        }
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭结果集,语句</span>

rs.close();
st.close();
//归还连接
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return totalpage;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> Vector&lt;String[]&gt; getPageContent(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> page,String sql)
{
    Vector</span>&lt;String[]&gt; vcon = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector&lt;String[]&gt;<span style="color: rgba(0, 0, 0, 1)">();
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行语句得到结果集</span>
        ResultSet rs =<span style="color: rgba(0, 0, 0, 1)"> st.executeQuery(sql);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取结果集的元数据</span>
        ResultSetMetaData rsmt =<span style="color: rgba(0, 0, 0, 1)"> rs.getMetaData();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到结果集中的总列数</span>
        <span style="color: rgba(0, 0, 255, 1)">int</span> count =<span style="color: rgba(0, 0, 0, 1)"> rsmt.getColumnCount();
        </span><span style="color: rgba(0, 0, 255, 1)">int</span> start = (page-<span style="color: rgba(128, 0, 128, 1)">1</span>)*<span style="color: rgba(0, 0, 0, 1)">span;
        </span><span style="color: rgba(0, 0, 255, 1)">if</span>(start!=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">)
        {
            rs.absolute(start);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">int</span> temp=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
        </span><span style="color: rgba(0, 0, 255, 1)">while</span>(rs.next()&amp;&amp;temp&lt;<span style="color: rgba(0, 0, 0, 1)">span)
        {
            temp</span>++<span style="color: rgba(0, 0, 0, 1)">;
            String[] str </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> String[count];
            </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">int</span> i=<span style="color: rgba(128, 0, 128, 1)">0</span>;i&lt;str.length;i++<span style="color: rgba(0, 0, 0, 1)">)
            {
                str[i] </span>= rs.getString(i+<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">转码</span>
                str[i] = <span style="color: rgba(0, 0, 255, 1)">new</span> String(str[i].getBytes(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISO-8859-1</span><span style="color: rgba(128, 0, 0, 1)">"</span>),<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">gb2312</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            }
            vcon.add(str);
        }
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭结果集,语句</span>

rs.close();
st.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return vcon;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> getSelectId(String sql)
{
    </span><span style="color: rgba(0, 0, 255, 1)">int</span> id = <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        Connection con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        sql </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> String(sql.getBytes(),<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISO-8859-1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">执行语句得到结果集</span>
        ResultSet rs =<span style="color: rgba(0, 0, 0, 1)"> st.executeQuery(sql);
        rs.next();
        id </span>= rs.getInt(<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
        rs.close();
        st.close();
        con.close();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">(Exception e)
    {
        e.printStackTrace();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> id;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> boolean batchSql(String[] sql)
{
    boolean flag </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
    Connection con </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">
    {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">初始化上下文</span>
        Context initial = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> InitialContext();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">其中mysql为数据源jndi名称</span>
        DataSource ds = (DataSource)initial.lookup(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">java:comp/env/jdbc/cartds</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">得到连接</span>
        con=<span style="color: rgba(0, 0, 0, 1)">ds.getConnection();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">禁用自动提交模式,并开始一个事务</span>
        con.setAutoCommit(<span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">声明语句</span>
        Statement st =<span style="color: rgba(0, 0, 0, 1)"> con.createStatement();
        </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">(String str:sql)
        {
            str </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> String(str.getBytes(),<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISO-8859-1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加批处理中的sql</span>

st.addBatch(str);
}
//执行批处理
st.executeBatch();
//将事物提交
con.commit();
//恢复自动提交模式
con.setAutoCommit(true);
st.close();
}
catch(Exception e)
{
flag
= false;
try
{
//事务回滚
con.rollback();
}
catch(Exception ee)
{
ee.printStackTrace();
}
}
finally
{
try
{
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
return flag;
}
}

第五步

测试,核心代码

          //插入用户注册信息
                String temp = "insert into UserInfo(Uid,Uname,Upwd,Uemail) "+
                        "values("+uid+",'"+uname+"','"+fpwd+"','"+email+"')";
                int i = DBcart.updateTable(temp);
                if(i==0)
                {//没有插入数据库
                    String msg = "对不起, 注册失败, 请重新注册!!!";
                    pageForward(msg,request,response);
                }
                else
                {
                    String msg = "恭喜您, 注册成功!!!";
                    pageForward(msg,request,response);
                }

结果: