java使用数据库连接池
连接池的实现方式是首先使用JNDI(JavaTM Naming and Directory Interface) 将数据源对象注册为一个命名服务,然后使用JNDI提供的服务接口,按照名称检索对应的数据源。
查找数据源的方法:
1、创建一个命名服务环境(Context)。
2、利用该环境对象的lookup方法按名查询,得到相应数据源对象。
3、调用数据源对象的getConnection方法获取与数据库的连接。
第一步:Tomcat 安装目录下的conf的context.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<String><span style="color: rgba(0, 0, 0, 1)"> getInfo(String sql)
{
Vector</span><String> vclass = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector<String><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<String[]><span style="color: rgba(0, 0, 0, 1)"> getInfoArr(String sql)
{
Vector</span><String[]> vtemp = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector<String[]><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<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<String[]> getPageContent(<span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> page,String sql)
{
Vector</span><String[]> vcon = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector<String[]><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()&&temp<<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<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); }
结果: