一、前言
其实,改写后的JDBC Data-Source是运行在Servlet中的,通过JNDI去查找数据源。我用Orion试的,将本站《JAVA/JSP学习系列之六(MySQL翻页例子) 》 简单改写了一下。
二、配置
(1)JDBC
需要将用到的JDBC驱动Copy到[ORION]/lib目录下
(2)data-source
在[ORION]/config/data-sources.xml文件中加入如下:
〈data-source
class="com.evermind.sql.DriverManagerDataSource"
name="mySqlDbpage"
location="jdbc/HypersonicCoreDS"
xa-location="jdbc/xa/HypersonicXADS"
ejb-location="jdbc/mysqlDbPage"
connection-driver="org.gjt.mm.mysql.Driver"
username="root"
password=""
url="jdbc:mysql://localhost/test"
inactivity-timeout="30"
/〉
需要注意的是:
(1)ejb-location这个后面的“jdbc/mysqlDbPage”是JNDI要来查找的。
(2)connection-driver为JDBC数据库驱动
(3)url是JDBC中的URL
(4)username为数据库用户名
(5)password为用户密码
(6)inactivity-timeout为数据库连接超时,默认为30秒
对于其他的地方不要改。
三、改写后的代码如下:
1@ page contentType="text/html;charset=gb2312"
1@ page import="java.sql.*, javax.sql.DataSource, javax.naming.InitialContext"
1
2
3//建立一个JNDI查找对象
4
5InitialContext JNDI_Context = new InitialContext();
6
7//JNDI查找数据源
8
9DataSource ds = (DataSource) JNDI_Context.lookup("jdbc/mysqlDbPage");
10
11//得到一个数据源连接
12
13Connection conn = ds.getConnection();
14
15int intPageSize; //一页显示的记录数
16
17int intRowCount; //记录总数
18
19int intPageCount; //总页数
20
21int intPage; //待显示页码
22
23java.lang.String strPage;
24
25int i;
26
27//设置一页显示的记录数
28
29intPageSize = 2;
30
31//取得待显示页码
32
33strPage = request.getParameter("page");
34
35if(strPage==null){
36
37//表明在QueryString中没有page这一个参数,此时显示第一页数据
38
39intPage = 1;
40
41} else{
42
43//将字符串转换成整型
44
45intPage = java.lang.Integer.parseInt(strPage);
46
47if(intPage<1) intPage = 1;
48
49}
50
51// 得到结果
52
53stmt = conn.createStatement();
54
55ResultSet sqlRst = stmt.executeQuery("select f1 from test");
56
57//获取记录总数
58
59sqlRst.last();
60
61intRowCount = sqlRst.getRow();
62
63//记算总页数
64
65intPageCount = (intRowCount+intPageSize-1) / intPageSize;
66
67//调整待显示的页码
68
69if(intPage>intPageCount)
70
71intPage = intPageCount;
72
1<html>
2<head>
3<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
4<title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - mysql</title>
5</head>
6<body>
7<table border="1" cellpadding="0" cellspacing="0">
8<tr>
9<th>姓名</th>
10</tr>
11
if(intPageCount>0)
{
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i<intpagesize !sqlrst.isafterlast()){="" &&="" <tr="" ```="">
1=sqlRst.getString(1)
1 sqlRst.next();
2
3i++;
4
5}
6
7}
8
第=intPage
页 共```
=intPageCount
1
if(intPage<intpagecount){ <a="" href="mysqlpage.jsp?page=
=intPage+1
">下一页
}
1
if(intPage>1){
<a href="mysqlpage.jsp?page=
=intPage-1
">上一页</a>
}
1
2</intpagecount){></body>
3</html>
1
2
3//关闭结果集
4
5sqlRst.close();
6
三、怎么去运行?
见前文《JAVA/JSP学习系列之五(JDBC-ODBC翻页例子)》。
注意:MySQL数据库为test,中间有个表test,有个字段f1(varchar)