java链接数据库及分页
- 格式:docx
- 大小:20.22 KB
- 文档页数:7
JA V A界面程序设计和数据库连接一、原理简介1. JAV A连接数据库的原理:使用JDBC(JA V A数据库连接)组件完成,JDBC在JA V A 程序和数据之间是一个桥梁作用。
JA V A通过JDBC向数据库发送SQL命令,数据库执行SQL命令后将结果通过JDBC返回给JAV A程序。
连接方法:JAV A程序《------》JDBC《------》Oracle Driver《------》Oracle数据库Oracle Driver: Oracle 数据库的驱动程序2.JDBC常用的接口:DriverManager:负责加载不同的驱动程序Statement:用来执行SQLResultSet:表示数据库的查询表(结果)3.连接过程(1)加载JDBC包(2)注册Oracle JDBC驱动程序(3)打开数据库连接(4)创建Statement对象(5)提交SQL语句(6)获得SQL执行的结果(8)关闭对象二、数据库连接案例程序功能介绍:从一个表login中查询表的每一个记录,并显示记录(每个记录的ID 和Password)。
(1)建立project,命名为conn(2)添加一个新的class文件,命名为conn(3)将下面的代码拷贝到程序编辑窗口import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.*;public class conn{public static void main(String[] args) {String sql = "";Connection conn = null;ResultSet rs;try {//注册驱动程序Class.forName("oracle.jdbc.driver.OracleDriver");//连接数据库,这里连接远程的数据库服务器orcl,用户名stu06,密码swufe111conn =DriverManager.getConnection("jdbc:oracle:thin:@192.168.210.229:1521:o rcl","stu01","swufe111");//创建Statement对象Statement stmt= conn.createStatement();sql="select * from login ";//向Oracle数据库端提交SQL,并由Oracle数据库执行SQL,返回结果给rsrs=stmt.executeQuery(sql);//访问查询的数据集while(rs.next()){System.out.println("用户名:"+rs.getString(1)+"密码:"+rs.getString(2));}//关闭数据库的连接,防止连接泄露stmt.close();conn.close();} catch (ClassNotFoundException e) {//捕捉数据库驱动异常错误System.out.println("加载数据库驱动异常,请检查");} catch (SQLException e) {//捕捉sql执行错误System.out.println("执行数据库操作异常,SQL语句为:" + sql);System.out.println("异常错误是:" + e.toString());}}}(4)加载ojdbc14.jar包:->双击scr-default package ->选择build Path->config build path->ilibaries->Add External->Archives->选择ojdbc14.jar包(5)运行程序看看效果案例二:登陆程序(带用户界面的登陆程序import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.Color;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JPasswordField;import java.sql.*;public class FormAdd extends JFrame implements ActionListener {private JLabel label1 = new JLabel("账号");private JLabel label2 = new JLabel("密码");private JLabel label3 = new JLabel("登录状态");private JTextField txtId = new JTextField(25);private JPasswordField txtPass = new JPasswordField(25);private JButton btnOK = new JButton("确定");private JButton btnCancel = new JButton("取消");FormAdd(){this.setSize(500,200);this.setTitle("登录界面");this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setLayout(new FlowLayout(FlowLayout.CENTER,70,20));this.add(label1);this.add(txtId);this.add(label2);this.add(txtPass);this.add(btnOK);this.add(btnCancel);label3.setForeground(Color.RED);this.add(label3);btnOK.addActionListener(this);btnCancel.addActionListener(this);this.setVisible(true);}// @Overridepublic void actionPerformed(ActionEvent event) {if(event.getSource().equals(btnOK)){String sql = "";Connection conn = null;ResultSet rs;try {Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.210.229:1521:orcl","stu01","sw ufe111");Statement stmt = conn.createStatement();sql="select count(*) from login where id='"+txtId.getText()+"' and password='"+txtPass.getText()+"'";rs=stmt.executeQuery(sql);if(rs.next()){if(rs.getInt(1)!=0){label3.setText("登录成功");}else{label3.setText("登录失败");}}stmt.close();conn.close();} catch (ClassNotFoundException e) {System.out.println("加载数据库驱动异常,请检查");//e.printStackTrace();} catch (SQLException e) {System.out.println("执行数据库操作异常,SQL语句为:" + sql);System.out.println("异常错误是:" + e.toString());//e.printStackTrace();}}else{txtId.setText("");txtPass.setText("");}}public static void main(String[] args) {new FormAdd();}}。
java分页实现原理Java分页实现原理在开发Web应用程序时,经常需要对大量数据进行分页展示,以提高用户体验和系统性能。
Java提供了多种方法来实现分页功能,本文将介绍一种常用的实现原理。
一、分页的概念和作用分页是将大量数据按照一定的规则分成若干页进行展示的一种技术。
在Web应用程序中,分页可以有效地减少单个页面的数据量,提高页面加载速度,同时也方便用户进行数据浏览和导航。
二、基本原理Java分页的基本原理是通过查询数据库获取数据,并根据每页显示的数量和当前页码来划分数据,然后将划分后的数据进行展示。
下面是具体的实现步骤:1. 获取总记录数:首先需要查询数据库获取数据的总记录数,以便计算总页数。
2. 计算总页数:根据总记录数和每页显示的数量,可以计算出总页数。
总页数 = 总记录数 / 每页显示的数量(向上取整)。
3. 获取当前页数据:根据当前页码和每页显示的数量,计算出数据的起始位置和结束位置,然后查询数据库获取当前页的数据。
4. 展示数据:将获取到的当前页数据进行展示,可以通过列表、表格等方式展示数据。
5. 分页导航:在页面底部显示分页导航条,包括首页、上一页、下一页、末页等按钮,用户可以通过点击按钮来切换页码。
6. 数据校验:在获取当前页数据之前,需要对页码进行校验,确保页码不超出总页数的范围。
三、关键代码示例下面是一个简单的Java代码示例,用于实现基本的分页功能:```java// 查询总记录数int totalRecords = dao.getTotalRecords();// 计算总页数int pageSize = 10; // 每页显示10条数据int totalPages = (int) Math.ceil((double) totalRecords / pageSize);// 校验页码int currentPage = 1; // 当前页码if (currentPage < 1) {currentPage = 1;} else if (currentPage > totalPages) {currentPage = totalPages;}// 计算起始位置和结束位置int startIndex = (currentPage - 1) * pageSize;int endIndex = startIndex + pageSize;// 查询当前页数据List<Data> dataList = dao.getDataList(startIndex, endIndex);// 展示数据for (Data data : dataList) {// 展示数据的代码}// 分页导航String navigation = generateNavigation(currentPage, totalPages);// 展示分页导航的代码```以上代码中,`dao`代表数据访问对象,`Data`代表数据实体类。
java redis 缓存分页实现原理Java Redis缓存是一种用于在Web应用程序中提高数据访问性能的技术。
它通过将常用的数据存储在内存中,以便更快地访问和获取,从而减少了对数据库的访问。
分页是Web应用程序中常见的功能之一,它允许用户在列表或表格中浏览数据,并按页查看数据,以减少数据量和提高用户体验。
Java Redis缓存的分页实现原理是,将查询的结果集划分为多个页,并将每个页的数据存储在Redis缓存中,以供后续的访问和查询。
下面将详细介绍Java Redis缓存分页的实现原理。
1.将查询结果集分页:在数据库查询之后,将结果集按照每页显示的数量划分为多个页,例如每页显示10条数据,将结果集分为若干个包含10条数据的页。
这样可以方便后续的分页访问和查询。
2.将每页的数据存储到Redis缓存中:对于每个分页的数据,将其存储到Redis缓存中。
可以使用Redis 的数据结构Hash或List来存储每页的数据。
对于Hash结构,可以使用页号作为Key,对应的数据作为Value,将所有页的数据存储到一个Hash中。
对于List结构,可以使用一个List来存储所有的分页数据,每个分页数据作为一个元素。
通过使用Redis缓存,可以提高分页的访问速度和性能。
3.使用Redis缓存进行分页查询:当用户请求分页数据时,首先从Redis缓存中获取对应页的数据。
如果缓存中存在该页的数据,则直接返回给用户;如果缓存中不存在该页的数据,则从数据库中查询该页的数据,并存储到Redis缓存中,以供后续的查询和访问。
4.缓存失效和更新:为了保证数据的实时性,需要处理缓存的失效和更新问题。
当用户修改或删除数据时,需要更新对应页的数据缓存,或者将所有缓存的数据进行失效处理,以保证数据的一致性。
可以通过监听数据的修改和删除操作,在数据库操作完成后,更新或失效对应的缓存数据。
5.缓存过期时间设置:为了控制内存使用和避免缓存数据过时,可以设置缓存数据的过期时间。
JSP+JavaBean1、JavaBean类1、显示学生信息内容JavaBeanpackage com.DataBase;import java.sql.*;public class MyDbBean{private Statement stmt = null;ResultSet rs = null;private Connection conn = null;private String dsn;//构造函数public MyDbBean() { }//根据dsn参数,加载驱动程序,建立连接public void getConn(String dbname, String uid, String pwd) throws Exceptiontry{dsn = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=" +dbname;Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();conn = DriverManager.getConnection(dsn, uid, pwd);}catch (Exception ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}//执行查询类的SQL语句,有返回集public ResultSet executeQuery1(String sql){rs = null;try{stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONL Y);rs = stmt.executeQuery(sql);}catch(SQLException ex){System.err.println("aq.executeQuery:"+ex.getMessage());}return rs;}//执行更新类的SQL语句,无返回集public void executeUpdate2(String sql){stmt = null;rs=null;try{stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONL Y);stmt.executeQuery(sql);stmt.close();conn.close();}catch(SQLException ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}//关闭对象public void closeStmt()try{ stmt.close(); }catch(SQLException ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}public void closeConn(){try{ conn.close(); }catch(SQLException ex){System.err.println("aq.executeQuery: " + ex.getMessage());}}}“list.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="testbean" scope="session" class="com.DataBase.MyDbBean" /><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>学籍管理系统</title></head><%! String url,sql; %><%! int i;%><body bgcolor="#ffffff"><div align="center"><font color="#000000" size="5">学籍管理系统</font> </div> <table width="75%" border="1" cellspacing="1" cellpadding="1" align="center"><tr><td width=16% align=center>学号</td><td width=16% align=center>姓名</td><td width=8% align=center>性别</td><td width=8% align=center>年龄</td><td width=16% align=center>籍贯</td><td width=12% align=center>更改</td><td width=12% align=center>删除</td></tr><%//调用getConn方法与数据库建立连接testbean.getConn("Data_Stu", "sa","");sql="select * from stuInfo";ResultSet rs=testbean.executeQuery1(sql);//查询数据库while(rs.next()){%><tr><td width=16% align=center><%=rs.getString(1)%></td><td width=16% align=center><%=rs.getString(2)%></td><td width=8% align=center><%=rs.getString(3)%></td><td width=8% align=center><%=rs.getInt(4)%></td><td width=16% align=center><%=rs.getString(5)%></td><td width=12% align=center><%=rs.getString(6)%></td><td width=12% align=center><a href="change.jsp?xuehao=<%=rs.getString(1)%>">修改</a></td> <td width=12% align=center><a href="del.jsp?xuehao=<%=rs.getString(1)%>">删除</a></td></tr><%}rs.close();testbean.closeStmt();testbean.closeConn();%></table><div align="center"><a href="insert.jsp">添加新记录</a> </div></body></html>2、添加记录“insert.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*;" errorPage=""%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>添加记录</title></head><body bgcolor="#FFFFFF" text="#000000"><div align="center"><font color="#000000" size="5">添加新记录</font></div><form name="form1" method="post" action="query.jsp"><table width="35%" border="1" cellspacing="1" cellpadding="1" align="center"> <tr><td width="46%" align="center">学号</td><td width="54%"> <input type="text" name="xuehao" size="7"></td></tr><tr><td width="46%" align="center">姓名</td><td width="54%"> <input type="text" name="name" size="8"></td></tr><tr><td width="46%" align="center">性别</td><td width="54%"> <select name="sex" size="1"><option value="男" selected> 男</option><option value="女">女</option></select></td></tr><tr><td width="46%" align="center">年龄</td><td width="54%"> <input type="text" name="age" size="2"></td></tr><tr><td width="46%" align="center">籍贯</td><td width="54%"> <input type="text" name="jiguan" size="8"></td></tr><tr><td width="46%" align="center">院系</td><td width="54%"> <input type="text" name="department" size="8"></tr><tr align="center"><td colspan="2" align="center"><input type="submit" name="Submit" value="提交"> <input type="reset" name="reset" value="清空"></td></tr></table></form></body></html>“query.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="query" scope="session" class="com.DataBase.MyDbBean"/> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>插入数据</title></head><body><%! String xuehao,name,sex,age,jiguan,department,url,sql; %><%! int i;%><%xuehao=request.getParameter("xuehao").trim();name=request.getParameter("name").trim();name=new String(name.getBytes("ISO-8859-1"),"UTF-8");//编码转换sex=request.getParameter("sex").trim();sex=new String(sex.getBytes("ISO-8859-1"),"UTF-8");age=request.getParameter("age").trim();i=Integer.parseInt(age);jiguan=request.getParameter("jiguan").trim();jiguan=new String(jiguan.getBytes("ISO-8859-1"),"UTF-8");department=request.getParameter("department").trim();department=new String(department.getBytes("ISO-8859-1"),"UTF-8");if(xuehao.length()!=7){//检查学号的位数response.sendRedirect("err.jsp");}response.sendRedirect("err.jsp");}//调用getConn()方法与数据库建立连接query.getConn("Data_Stu","sa","");sql="select * from stuInfo where 学号='"+xuehao+"'";ResultSet rs=query.executeQuery1(sql);if(rs.getRow()>0){ response.sendRedirect("err.jsp"); }sql="insert into stuInfo(学号,姓名,性别,年龄,籍贯,院系)";sql=sql+"values('"+xuehao+"','"+name+"','"+sex+"','"+i+"','"+jiguan+"','"+department+"')";query.executeUpdate2(sql);out.println("<font size=3 color=blue>正在处理信息,请稍后......</font><meta http-equiv='refresh' content='2;url=list.jsp'>");rs.close();query.closeStmt();query.closeConn();%></body></html>3、更改记录“change.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@ page import="java.sql.*,java.util.*;" errorPage=""%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="modify" scope="session" class="com.DataBase.MyDbBean"/><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>修改记录</title></head><body bgcolor="#FFFFFF" text="#000000"><div align="center"><font color="#000000" size="5">修改记录</font> </div><%! String xuehao,url,sql,sex; %><%xuehao=request.getParameter("xuehao").trim();//调用getConn()方法与数据库建立连接modify.getConn("Data_Stu","sa","");sql="select * from stuInfo where 学号='"+xuehao+"'";ResultSet rs=modify.executeQuery1(sql);while(rs.next()){%><form name="form1" method="post" action="change_query.jsp?xuehao=<%=xuehao%>"><table width="35%" border="1" cellspacing="1" cellpadding="1" align="center"><tr><td width="46%" align="center">学号</td><td width="54%"> <%=rs.getString(1)%></td></tr><tr><td width="46%" align="center">姓名</td><td width="54%"> <input type="text" name="name" size="8" value=<%=rs.getString(2)%>></td></tr><tr><td width="46%" align="center">性别</td><td width="54%"> <%sex=rs.getString(3).trim();if(sex.equals("男")){%><option value="男" selected>男</option><option value="女">女</option></select><% }else{%><select name="sex" size="1"><option value="男" >男</option><option value="女"selected>女</option></select><% } %></td></tr><tr><td width="46%" align="center">年龄</td><td width="54%"> <input type="text" name="age" size="2" value=<%=rs.getInt(4)%>></td></tr><tr><td width="46%" align="center">籍贯</td><td width="54%"> <input type="text" name="jiguan" size="8" value=<%=rs.getString(5)%>></td></tr><tr><td width="46%" align="center">院系</td><td width="54%"> <input type="text" name="department" size="8" value=<%=rs.getString(6)%>></td></tr><tr align="center"><td colspan="2" align="center"><input type="submit" name="Submit" value="提交"> <input type="reset" name="reset" value="清空"></td></tr></table></form><%}rs.close();modify.closeStmt();modify.closeConn();%></body></html>“change_query.jsp”<%--Document : change_queryCreated on : 2010-5-8, 17:32:29Author : Administrator--%><%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="modify" scope="session" class="com.DataBase.MyDbBean"/><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>修改记录</title></head><body><%! String xuehao,name,sex,age,jiguan,department,url,sql; %><%! int i;%><%xuehao=request.getParameter("xuehao").trim();out.print(xuehao);name=request.getParameter("name").trim();name=new String(name.getBytes("ISO-8859-1"),"UTF-8");sex=request.getParameter("sex").trim();sex=new String(sex.getBytes("ISO-8859-1"),"UTF-8");age=request.getParameter("age").trim();i=Integer.parseInt(age);jiguan=request.getParameter("jiguan").trim();jiguan=new String(jiguan.getBytes("ISO-8859-1"),"UTF-8");department=request.getParameter("department").trim();department=new String(department.getBytes("ISO-8859-1"),"UTF-8");if(name.equals("")){response.sendRedirect("err1.jsp");}try{//调用getConn()方法与数据库建立连接modify.getConn("Data_Stu","sa","");sql="update stuInfo set 姓名= '"+name+"',性别= '"+sex+"',年龄="+i+",籍贯= '"+jiguan+"',院系=modify.executeUpdate2(sql);out.println("<font size=3 color=blue>正在修改记录,请稍后......</font><meta http-equiv='refresh' content='2;url=list.jsp'>");modify.closeStmt();modify.closeConn();}catch(Exception e){response.sendRedirect("err.jsp");}%></body></html>4、删除记录“del.jsp”<%@page contentType="text/html" pageEncoding="UTF-8"%><%@page import="java.sql.*,java.util.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><jsp:useBean id="del" scope="session" class="com.DataBase.MyDbBean"/><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>删除记录</title></head><body><%! String xuehao,url,sql; %><%xuehao=request.getParameter("xuehao").trim();try{//调用getConn()方法与数据库建立连接del.getConn("Data_Stu","sa","");sql="delete from stuInfo where 学号='"+xuehao+"'";del.executeUpdate2(sql);out.println("<font size=3 color=blue>正在删除数据,请稍后......</font>" +"<meta http-equiv='refresh' content='2;url=list.jsp'>");del.closeStmt();del.closeConn();}catch(Exception e){response.sendRedirect("err.jsp");}%></body></html>JSP+ Servlet 访问数据库<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>无标题文档</title></head><body><form name="form1" method="post" action="servlet"><p>客户查询</p><p>请输入用户名:<input type="text" name="USERNAME"><input type="submit" name="Submit" value="提交"></p><p> </p></form><form name="form2" method="get" action="servlet"><p>根据总数查询</p><p>总数范围在<input type="text" name="totalmin">和<input type="text" name="totalmax">之间</p><p><input type="submit" name="Submit2" value="提交"></p></form><p> </p></body></html>package tree;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import java.sql.*;public class queryextends HttpServlet {private static final String CONTENT_TYPE = "text/html; charset=GB2312";//Initialize global variablespublic void init() throws ServletException {super.init();}//执行HTTP Post请求public void doPost(HttpServletRequest request,HttpServletResponse response) throwsServletException,IOException{PrintWriter out=response.getWriter();response.setContentType(CONTENT_TYPE);//设置响应的MIME类型。
Java中使用MyBatis Plus连接和操作MySQL数据库1. 简介近年来,Java语言以其跨平台特性和广泛的应用领域成为了全球最受欢迎的编程语言之一。
而MySQL作为一种强大的开源关系型数据库,也是Java开发者首选的数据库之一。
在Java中,我们可以使用MyBatis Plus来连接和操作MySQL数据库,提升开发效率和简化数据库操作。
2. MyBatis Plus简介MyBatis Plus是基于MyBatis的一款增强工具,旨在简化和提升MyBatis的使用体验。
它提供了一系列强大的功能,如代码生成器、分页插件、性能分析插件等,使得开发者能够更加便捷地开发和维护数据库相关的应用程序。
3. 连接MySQL数据库在使用MyBatis Plus连接MySQL数据库之前,我们需要先在项目中引入相关的依赖。
可以通过Maven或Gradle等构建工具来管理项目的依赖。
在pom.xml或build.gradle文件中添加相应的依赖项,然后进行构建操作。
在Java代码中,我们需要创建一个数据源并配置相关的数据库连接信息。
可以使用MySQL提供的JDBC驱动程序来管理数据库连接。
在MyBatis Plus中,我们可以使用com.mysql.cj.jdbc.Driver作为驱动类,指定数据库的URL、用户名和密码来建立连接。
4. 创建实体类在进行数据库操作之前,我们需要定义与数据库表对应的实体类。
在Java中,我们可以使用POJO(Plain Old Java Object)来表示实体类。
POJO是一种普通的Java对象,不继承任何特定的父类或实现任何特定的接口。
在MyBatis Plus中,实体类需要使用@Table注解来指定对应的数据库表名,使用@Column注解来指定字段名,以及指定主键等属性。
通过在实体类中定义与表对应的字段和属性,我们可以通过MyBatis Plus来进行数据库的增删改查操作。
java中使用mysql union合并分页查询的示例代码在 Java 中,可以使用`MyBatis`或者`JDBC`来实现使用 MySQL `UNION`合并分页查询。
下面提供一个使用`MyBatis`实现的简单示例:首先,确保你已经添加了`MyBatis`的依赖,并在`SqlSessionFactory`中配置了数据源。
```javaimport org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import java.util.List;public class Union PaginationQueryExample {public static void main(String[] args) {// 假设你已经创建了 SqlSessionFactory 并初始化了SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(configurations);try (SqlSession session = factory.openSession()) {// 执行分页查询List<Object> result = performPaginationQuery(session);// 处理查询结果for (Object object : result) {// 输出结果System.out.println(object);}}}private static List<Object> performPaginationQuery(SqlSession session) { // 定义查询语句String query1 = "SELECT * FROM table1 limit ?,?";String query2 = "SELECT * FROM table2 limit ?,?";// 执行UNION 查询List<Object> result = session.selectList("SELECT id, name, age FROM ("+ "SELECT id, name, age FROM table1"+ " UNION"+ "SELECT id, name, age FROM table2"+ ") temp limit ?,?",0, 10);// 返回查询结果return result;}}```在上述示例中,使用了`UNION`关键字将`table1`和`table2`的结果合并。
java 分页调用多个分页接口的方法在实际开发中,我们经常会遇到需要从多个接口获取数据并进行分页展示的情况。
例如,我们需要从接口A获取用户列表,从接口B 获取订单列表,然后将两个列表合并后进行分页展示。
下面,我们将介绍一种简单而高效的方法来实现这个需求。
我们需要定义一个通用的分页请求类,用于封装分页查询的参数,如当前页码、每页数量等。
例如,我们可以定义一个名为PageRequest的类:```javapublic class PageRequest {private int page;private int size;// 省略getter和setter方法}```接下来,我们可以定义一个通用的分页结果类,用于封装分页查询的结果,如数据列表、总记录数等。
例如,我们可以定义一个名为PageResult的类:```javapublic class PageResult<T> {private List<T> data;private int total;// 省略getter和setter方法}```接着,我们可以定义一个分页调用接口的通用方法,用于根据不同的分页请求参数调用不同的接口并返回分页结果。
例如,我们可以定义一个名为getPageData的方法:```javapublic PageResult<Object> getPageData(PageRequest pageRequest) {// 根据分页请求参数调用接口A获取用户列表List<Object> userList = apiA.getUserList(pageRequest.getPage(),pageRequest.getSize());// 根据分页请求参数调用接口B获取订单列表List<Object> orderList = apiB.getOrderList(pageRequest.getPage(), pageRequest.getSize());// 将两个列表合并List<Object> mergedList = new ArrayList<>();mergedList.addAll(userList);mergedList.addAll(orderList);// 对合并后的列表进行分页处理List<Object> pageData = new ArrayList<>();int startIndex = (pageRequest.getPage() - 1) * pageRequest.getSize();int endIndex = Math.min(startIndex + pageRequest.getSize(), mergedList.size());if (startIndex < endIndex) {pageData = mergedList.subList(startIndex, endIndex);}// 构建分页结果对象PageResult<Object> pageResult = new PageResult<>();pageResult.setData(pageData);pageResult.setT otal(mergedList.size());return pageResult;}```我们可以在业务逻辑中调用getPageData方法来获取分页数据。
java⼿动分页处理经常我们在操作数据库的时候都会⽤到分页,⽽且很多框架也提供了分页功能,像PageHelper.但是在有些项⽬中,需要将数据查询出来进⾏⼿动分页,那么原理是什么呢?
其实很简单,⾸先需要知道数据总量,如果不知道数据总量,那么就要指定数据总量:totalCount 然后每页查询多少条数据,需要指定.我们默认pageSize=100
然后就进⾏分页了,下⾯是分页的代码
// 分页
short pageSize = 100;
int pageNum = totalCount / pageSize;
int surplus = totalCount % pageSize;//是不是整除
if (surplus > 0) {
pageNum = pageNum + 1;
}
for(int i = 0; i < pageNum; i++){
int pageBegin = i * pageSize;
//传⼊pageBegin,pageSize进⾏业务逻辑处理
}
上⾯是将所有数据进⾏分页处理.然后通过jdbc操作数据库,查询出业务数据.。
java连接数据库语句在Java中,可以使用JDBC(Java Database Connectivity)来连接和操作数据库。
下面是连接数据库的常见语句示例:1. 加载数据库驱动:```javaClass.forName("com.mysql.jdbc.Driver");```2. 建立数据库连接:```javaString url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";Connection connection = DriverManager.getConnection(url, username, password);```其中,url是数据库的地址,username和password是登录数据库的用户名和密码。
3. 执行SQL查询或更新:```javaStatement statement = connection.createStatement();String sql = "SELECT * FROM mytable";ResultSet resultSet = statement.executeQuery(sql);``````javaString sql = "INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2')";int rowsAffected = statement.executeUpdate(sql);```4. 处理结果集:```javawhile (resultSet.next()) {String column1 = resultSet.getString("column1");String column2 = resultSet.getString("column2");// 处理每一行数据}```5. 关闭数据库连接:```javaresultSet.close();statement.close();connection.close();```以上是连接和操作数据库的基本语句示例,具体的语句会根据使用的数据库类型、需要执行的SQL语句和具体业务需求进行调整。
JAVA使用JDBC连接数据库的几种方式JDBC(Java Database Connectivity)是Java编程语言用于连接数据库的一种标准API。
它提供了一种访问和操作不同类型数据库的方法。
在JDBC中,有几种不同的方式可以连接数据库。
下面是常见的几种方式以及它们的详细介绍。
1.使用JDBC驱动程序连接数据库2. DriverManager类连接数据库DriverManager是一个Java类,用于管理JDBC驱动程序。
它提供了一种简单的方法来注册和获取特定驱动程序的连接。
使用DriverManager 连接数据库时,首先需要加载驱动程序,并使用驱动程序的URL、用户名和密码创建连接。
然后可以使用这个连接执行SQL查询和更新操作。
3. DataSource接口连接数据库DataSource是一个接口,用于从数据库连接池获取连接。
连接池是一组预先创建的数据库连接,可以重复使用,从而提高应用程序的性能。
通过使用DataSource接口,可以通过配置连接池的方式来连接和管理数据库连接。
这种方式通常适用于大型应用程序或需要高并发连接的场景。
4. 使用JNDI(Java Naming and Directory Interface)连接数据库JNDI是Java提供的一种用于在Java应用程序中查找和访问命名服务的API。
通过使用JNDI,可以在应用程序中配置数据库连接信息,并使用统一的方式访问数据库。
这种方式通常适用于企业级应用程序,其中数据库连接信息可以统一管理。
5.使用第三方库连接数据库除了使用JDBC标准API连接数据库,还可以使用一些第三方库来简化数据库访问。
例如,Hibernate是一个流行的Java持久化框架,它提供了一种简单的方式来与数据库进行交互。
使用Hibernate,可以通过简单的配置来连接和管理数据库。
总结:上述是几种使用JDBC连接数据库的方式。
每种方式都有自己的优势和适用场景。
Java连接mysql数据库一.软件下载Mysql下载版本:4.1.11/downloads/mysql/4.1.htmlJDBC驱动下载版本:3.1.8/downloads/connector/j/3.1.htmlMysql界面插件:mysql-front下载版本镜像:HongKong(我下回来安装就是中文版了)http://www.mysqlfront.de/download.html二.软件安装打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”,出现如下界面:mysql安装向导启动,按“Next”继续选择安装类型,有“Typical(默认)”、“Complete(完全)”、“Custom (用户自定义)”三个选项,我们选择“Custom”,有更多的选项,也方便熟悉安装过程在“Developer Components(开发者部分)”上左键单击,选择“This feature, and all subfeatures, will be installed on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”。
在上面的“MySQL Server (mysql服务器)”、“Client Programs(mysql客户端程序)”、“Documentation (文档)”也如此操作,以保证安装所有文件。
点选“Change...”,手动指定安装目录。
填上安装目录,我的是“F:\Server\MySQL\MySQL Server 5.0”,也建议不要放在与操作系统同一分区,这样可以防止系统备份还原的时候,数据被清空。
按“OK”继续。
返回刚才的界面,按“Next”继续。
确认一下先前的设置,如果有误,按“Back”返回重做。
按“Install”开始安装。
正在安装中,请稍候,直到出现下面的界面这里是询问你是否要注册一个的账号,或是使用已有的账号登陆,一般不需要了,点选“Skip Sign-Up”,按“Next”略过此步骤。
Java中Page的用法一、引言在Java开发中,我们经常需要处理大量的数据集合,而这些数据往往需要进行分页展示。
为了方便进行数据分页操作,Java提供了Page类。
二、什么是Page类Page类是一个分页查询的结果集合,它封装了分页所需的各种信息,包括总记录数、总页数、当前页码等。
通过Page类,我们可以轻松地实现数据库查询结果的分页展示。
三、Page类的基本用法1. 导入相关类库首先,我们需要导入相关的类库,以便能够使用Page类。
在Java中,我们可以通过以下方式导入Page类:import org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;其中,org.springframework.data.domain.Page是Page类的主要类,org.springframework.data.domain.PageRequest是用于创建Page对象的工具类。
2. 创建Page对象要创建一个Page对象,我们需要指定当前页码、每页显示数量等参数。
可以通过PageRequest类的静态方法of()来创建PageRequest对象,并将其作为参数传递给Page类的构造方法,如下所示:PageRequest pageRequest = PageRequest.of(pageNumber, pageSize);Page<Product> productPage = new Page<>(pageRequest);其中,pageNumber表示当前页码,pageSize表示每页显示数量。
3. 获取分页信息创建Page对象后,我们可以通过Page类提供的方法获取分页相关的信息,如总记录数、总页数等。
以下是几个常用的方法:long totalElements = productPage.getTotalElements(); // 获取总记录数int totalPages = productPage.getTotalPages(); // 获取总页数int currentPage = productPage.getNumber(); // 获取当前页码,从0开始计数int pageSize = productPage.getSize(); // 获取每页显示数量4. 获取分页数据除了获取分页信息,我们还可以通过Page类的方法获取当前页的数据。
Java连接Oracle数据库常用方法在Java中连接Oracle数据库有多种方法,下面是几种常用的方法。
1. 使用JDBC连接Oracle数据库```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class OracleConnectionpublic static void main(String[] args)Connection connection = null;try//加载JDBC驱动程序Class.forName("oracle.jdbc.OracleDriver");//创建数据库连接String username = "username";String password = "password";connection = DriverManager.getConnection(url, username, password);//在此处执行SQL语句或其他操作} catch (ClassNotFoundException e) e.printStackTrace(;} catch (SQLException e)e.printStackTrace(;} finally//关闭数据库连接tryif (connection != null) connection.close(;}} catch (SQLException e)e.printStackTrace(;}}}``````javaimport java.sql.Connection;import java.sql.SQLException;import java.util.Properties;public class OracleConnectionPoolpublic static void main(String[] args)BasicDataSource dataSource = null;Connection connection = null;try//创建连接池Properties properties = new Properties(;properties.setProperty("driverClassName", "oracle.jdbc.OracleDriver");properties.setProperty("username", "username");properties.setProperty("password", "password");dataSource =BasicDataSourceFactory.createDataSource(properties);//从连接池中获取连接connection = dataSource.getConnection(;//在此处执行SQL语句或其他操作} catch (Exception e)e.printStackTrace(;} finally//关闭连接tryif (connection != null) connection.close(;}} catch (SQLException e) e.printStackTrace(;}//关闭连接池if (dataSource != null) trydataSource.close(;} catch (SQLException e) e.printStackTrace(;}}}}```3. 使用Spring的JdbcTemplateSpring的JdbcTemplate是一个简化数据库访问的工具类,可以更方便地执行SQL语句。
java分页处理注意事项
在Java中处理分页时,有一些关键的注意事项需要考虑:
性能优化:分页查询可能会对数据库造成较大的压力,特别是当查询的数据量很大时。
为了提高性能,可以考虑使用索引、缓存和数据库特定的优化策略。
数据一致性:在并发环境下,需要考虑数据的一致性问题。
如果多个用户同时进行分页查询,可能会出现数据不一致的情况。
为了解决这个问题,可以使用乐观锁或悲观锁,或者在应用层进行适当的处理。
边界条件的处理:在进行分页查询时,需要正确处理页码和每页显示的数量。
如果用户输入的页码或每页显示的数量不在合理的范围内(例如,页码为负数或0,或者每页显示的数量大于总记录数),可能会导致错误或异常。
数据库方言的考虑:不同的数据库系统(如MySQL、Oracle、SQL Server等)可能有不同的分页查询语法。
因此,需要根据所使用的数据库系统编写相应的分页查询语句。
分页信息的传递:分页信息(如当前页码、每页显示的数量、总记录数等)需要在前后端之间进行传递。
这些信息可以通过HTTP请求参数、Session、Cookie等方式进行传递。
内存管理:在处理大量数据时,需要考虑内存管理问题。
如果一次性加载所有数据到内存中,可能会导致内存溢出或性能问题。
因此,应尽可能地使用流式处理或延迟加载技术。
错误处理:在分页查询过程中,可能会遇到各种错误,如数据库连接问题、查询错误等。
需要对这些错误进行适当处理,并给出友好的错误提示信息。
总之,分页处理是一个复杂的任务,需要考虑多方面的因素。
在实际应用中,需要根据具体的需求和环境进行适当的处理和优化。
java中page分页对象的用法在Java中,Page是Spring Data中用于分页查询的对象,它提供了一些方法来处理分页数据。
首先,你需要在查询方法的参数中添加一个Pageable对象。
Pageable代表一个分页请求,通过它可以设置页码、每页显示的数据量以及排序规则等。
例如,假设存在一个名为userRepository的Repository接口,并希望对用户数据进行分页查询,可以这样使用Pageable对象:```javaimport org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;importorg.springframework.data.repository.PagingAndSortingRepositor y;public interface UserRepository extends PagingAndSortingRepository<User, Long> {Page<User> findAll(Pageable pageable);}```在上述示例中,`Page<User> findAll(Pageable pageable)`方法返回一个Page对象,其中User是实体类,Long是实体类的主键类型。
Page对象代表了查询结果的一个分页片段。
对于Page对象,可以使用以下方法来获取分页数据的相关信息:- `int getTotalPages()`:获取总页数。
- `long getTotalElements()`:获取总记录数。
- `int getNumber()`:获取当前页码,从0开始。
- `int getSize()`:获取每页显示的数据量。
- `boolean isFirst()`:判断是否为首页。
- `boolean isLast()`:判断是否为末页。
java 分页游标的实现方式在Java编程中,分页游标是一种常用的技术,用于实现对大数据集的快速分页查询。
通过使用分页游标,可以将数据集划分成多个页面,并在这些页面之间进行导航。
本文将介绍分页游标的实现方式,以及如何在Java中应用它们。
1. 常用的分页游标实现方式1.1 基于数据库的实现方式在许多情况下,数据通常存储在数据库中。
因此,一种常见的分页游标实现方式是使用数据库的分页功能。
对于关系型数据库,可以使用SQL语句中的LIMIT和OFFSET子句来实现分页游标。
通过指定LIMIT子句来限制每页的记录数,而OFFSET子句则指定从哪个记录开始。
通过不断调整OFFSET的值,可以在数据库中进行分页查询。
1.2 基于集合的实现方式如果数据集不存储在数据库中,而是在内存中,可以使用Java中的集合类来实现分页游标。
通过将数据集合划分成多个子集合,并使用游标记录当前页面的位置,就可以在集合中进行分页操作。
比如使用ArrayList来存储数据集,在每次查询时,根据游标索引截取所需的数据。
2. Java中的分页游标实现2.1 使用数据库分页功能实现分页游标在Java中,可以使用各种数据库连接框架,如JDBC、Hibernate 和MyBatis等,来执行分页查询。
这些框架通常提供了API来构建查询语句并设置分页参数。
通过设置LIMIT和OFFSET参数,可以实现数据库分页查询。
以下是使用MySQL数据库和JDBC框架实现分页游标的示例代码:```java// 定义每页的记录数和当前页数int pageSize = 10;int currentPage = 1;// 计算偏移量int offset = (currentPage - 1) * pageSize;// 构建查询语句String sql = "SELECT * FROM table_name LIMIT ? OFFSET ?";PreparedStatement statement =connection.prepareStatement(sql);statement.setInt(1, pageSize);statement.setInt(2, offset);// 执行查询并处理结果ResultSet resultSet = statement.executeQuery();// 处理查询结果...```2.2 使用集合类实现分页游标如果数据保存在内存中的集合中,可以使用Java集合类来实现分页游标。
Java实现简单的分页功能本⽂实例为⼤家分享了Java实现分页功能的具体代码,供⼤家参考,具体内容如下不⽤根据改变SQL的形式去查询;直接查询所有的数据,根据页码⾃动显⽰数据;分页对象public class PageUtils implements Serializable {/****/private static final long serialVersionUID = -5247614532234782640L;public final static String PAGE = "page";public final static String PAGE_NO = "pageno";public final static String PAGE_SIZE = "pagesize";private long pageSize=10;//每页显⽰记录数private long firstResult=0;//当页第⼀条记录号private long totalCount;//总记录数private long totalPage;//总页码private long pageNo=1;//当前页码private List<?> sumData;//此集合可⽤来保存合计数据private List<?> data;//查询结果public long getPageSize() {return pageSize;}public void setPageSize(long pageSize) {this.pageSize = pageSize;}public long getFirstResult() {if(pageNo>0){firstResult=pageSize * (pageNo -1);}else{firstResult = 0;}return firstResult;}public long getNextPageResult(){if(pageNo>0){return pageSize*(pageNo-1);}else{return pageNo;}}public void setFirstResult(long firstResult) {this.firstResult = firstResult;}public long getTotalCount() {return totalCount;}public void setTotalCount(long totalCount) {this.totalCount = totalCount;totalPage = this.totalCount/pageSize;if (totalPage == 0 || totalCount % pageSize != 0) {totalPage++;}}public long getTotalPage() {return totalPage;}public void setTotalPage(long totalPage) {this.totalPage = totalPage;}public long getPageNo() {return pageNo;}public void setPageNo(long pageNo) {this.pageNo = pageNo;}public List<?> getData() {return data;}public void setData(List<?> data) {this.data = data;}/*** 是否第⼀页*/public boolean isFirstPage() {return pageNo <= 1;}/*** 是否最后⼀页*/public boolean isLastPage() {return pageNo >= getTotalPage();}/*** 下⼀页页码*/public long getNextPage() {if (isLastPage()) {return pageNo;} else {return pageNo + 1;}}/*** 上⼀页页码*/public long getPrePage() {if (isFirstPage()) {return pageNo;} else {return pageNo - 1;}}public PageUtils(){}public PageUtils(long pageNo){this.pageNo=pageNo;}public PageUtils(long pageNo,long pageSize){this.pageNo=pageNo;this.pageSize = pageSize;}public List<?> getSumData() {return sumData;}public void setSumData(List<?> sumData) {this.sumData = sumData;}}查询的数据实体在查询的实体⾥添加页码和每页显⽰条数参数; private int pageSize; //每页显⽰的条数private int pageNo; //当前页码public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}控制层Controller@RequestMapping("/list")public String list(Model model,ChannelValueInfoView input) {// input:传⼊的参数为对象PageUtils page=new PageUtils();//如果传⼊的当前条数为0,则赋予值(⾸次查询不带参);if(input.getPageSize()==0){//当前页码第⼀页input.setPageNo(1);//每页显⽰条数,当前每页显⽰10条数据;input.setPageSize(10);}page.setPageNo(input.getPageNo());page.setPageSize(input.getPageSize());//核⼼分页代码PageHelper p=new PageHelper();Page<ChannelValueInfoList> l=p.startPage(input.getPageNo(),input.getPageSize());//紧跟着的第⼀个select查询将会被分页channelValueService.getChannelValueInfoViewList(input);model.addAttribute("input", input);page.setData(l);page.setTotalCount(l.getTotal());model.addAttribute("page", page);return "index";}页⾯处理//循环穿过来的PAGE.data数据<tr th:each="ts : ${page.data}"><td th:text="${ts.channelValueName}"></td>----------<form id="content_form" action="/channelValue/list" method="post" ><div>总数:<span id="totalCount" th:text="${page.totalCount}">0</span></div><ul class="pagination"><li class="disabled"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="onFirst()">⾸页</a> </li><li class="disabled"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="onPre()"><</a> </li><li class="active"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><span id="beginRow" th:text="${page.pageNo}">0</span></a></li><li class="disabled"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="onNext()">></a> </li><li class="disabled"><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick="onLast()">尾页</a> </li></ul></for m>----------<script>function onFirst() {onList(1);}function onPre() {var beginRow = parseInt($('#beginRow').html());if (beginRow - 1 > 0) {onList(beginRow - 1);}}function onNext() {var beginRow = parseInt($('#beginRow').html());var totalCount = parseInt($('#totalCount').html());var pageSize = parseInt($('#pageSize').val());if (parseInt(totalCount / pageSize + 1) > beginRow + 1) {onList(beginRow+1);}}function onLast() {var totalCount = parseInt($('#totalCount').html());var pageSize = parseInt($('#pageSize').val());onList(parseInt(totalCount / pageSize + 1) - 1);}function onList(pageNo) {if (pageNo == 0)pageNo = 1;$('#pageNo').val(pageNo);$("#content_form").submit();}</script>以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
jfinal的分页函数引言:JFinal是一款基于Java语言开发的轻量级MVC框架,其提供了丰富的功能和方便的开发方式,能够快速构建出高效、易维护的Web应用程序。
在实际开发中,分页功能是常用的功能之一,对于处理大量数据的Web应用尤为重要。
本文将详细介绍JFinal框架的分页函数及其使用,以帮助开发者快速应用于实际项目中。
一、JFinal的分页函数概述:JFinal框架提供了一个Page类,通过该类对象可以方便地实现分页功能。
在JFinal中,我们可以使用Page对象来表示一个分页列表,该对象可以包含总记录数、每页记录数、总页数、当前页数以及当前页的数据等信息。
通过使用分页函数,我们可以轻松地实现数据的分页显示,提高用户体验和系统性能。
二、JFinal分页函数的使用步骤:在使用JFinal分页函数进行数据分页时,我们需要按照以下步骤进行操作:1. 创建一个Page对象:我们首先需要实例化一个Page对象,该对象包含了分页所需的信息。
可以通过调用静态方法`Page.paginate(int pageNumber, int pageSize, String select, String sqlExceptSelect)`来创建一个Page对象,其中pageNumber表示当前所在的页码,pageSize表示每页显示的记录数,select表示要查询的字段,sqlExceptSelect表示查询的SQL语句。
2. 调用select()方法选择要查询的字段:在创建Page对象时,我们需要调用select()方法指定要查询的字段,该方法接收一个字符串参数,可以使用SQL语句中的通配符来表示所有字段(`*`),也可以指定某几个字段。
3. 调用from()方法指定要查询的表:在创建Page对象时,我们需要调用from()方法指定要查询的表,该方法接收一个字符串参数,表示要查询的表名。
4. 调用where()方法指定查询条件:在创建Page对象时,我们可以选择调用where()方法指定查询条件,该方法接收一个字符串参数,表示查询条件的SQL语句。
package com.sc.Dao;import java.sql.*;public class Conn {static String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";static String url="jdbc:sqlserver://localhost:1433;databasename=BBS";static String uname="sa";static String upass="sa";static{try {Class.forName(driver);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static Connection getConn(){try {Connection conn=DriverManager.getConnection(url,uname,upass);return conn;} catch (Exception e) {// TODO: handle exception}return null;}}package com.sc.Dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class dao {private Connection getConn() {return Conn.getConn();}/** 查询用户表,帖子,回复。
*/public List querypage(String sql,Pager p){Connection con=getConn();Statement sta=null;List list=new ArrayList();ResultSet rs=null;try {sta=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);rs=sta.executeQuery(sql);st();p.init(rs.getRow());rs.absolute(p.getStartRow());ResultSetMetaData rsd=rs.getMetaData();//查询那一页的数据,封装数据,通用版使用MAP封装每行数据for(int n=0;n<p.getPagesize()&&rs.next();n++){Map<String, Object> map=new HashMap<String, Object>();for(int i=0;i<rsd.getColumnCount();i++){map.put(rsd.getColumnName(i+1), rs.getObject(i+1));}list.add(map);}if(rs!=null){rs.close();}if(sta!=null){sta.close();}if(con!=null)con.close();} catch (Exception e) {// TODO: handle exception}finally{try {if(rs!=null){rs.close();}if(sta!=null){sta.close();}if(con!=null)con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return list;}/** 查询所有值*/public List query(String sql,Object... obj){Connection con=getConn();PreparedStatement sta = null;List list=new ArrayList();ResultSet rs=null;try {sta=con.prepareStatement(sql);if(obj!=null){for(int i=0;i<obj.length;i++){sta.setObject(i+1, obj[i]);}}rs=sta.executeQuery();ResultSetMetaData rsd=rs.getMetaData();//封装数据,通用版使用MAP封装每行数据while(rs.next()){Map<String, Object> map=new HashMap<String, Object>();for(int i=0;i<rsd.getColumnCount();i++){map.put(rsd.getColumnName(i+1), rs.getObject(i+1));}list.add(map);}if(rs!=null){rs.close();}if(sta!=null){sta.close();}if(con!=null)con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {if(rs!=null){rs.close();}if(sta!=null){sta.close();}if(con!=null)con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return list;}/** 删除添加*/public int update(String sql){Connection con=getConn();Statement sta = null;int n=0;try {sta=con.createStatement();n=sta.executeUpdate(sql);if(sta!=null){sta.close();}if(con!=null)con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {if(sta!=null){sta.close();}if(con!=null)con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return n;}public int update(String sql,Object... obj ){ Connection con=getConn();PreparedStatement sta = null;int n=0;try {sta=con.prepareStatement(sql);if(obj!=null){for(int i=0;i<obj.length;i++){sta.setObject(i+1, obj[i]);}}n=sta.executeUpdate();if(sta!=null){sta.close();}if(con!=null)con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {if(sta!=null){sta.close();}if(con!=null)con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return n;}}package com.sc.Dao;public class Pager {int pn=1;int pagesize=5;int row=0;int page=1;public void init(int row){this.row=row;page=row%pagesize==0?row/pagesize:row/pagesize+1;if(pn>page){pn=page;}}public int getStartRow(){return (pn-1)*pagesize;}public int getPn() {return pn;}public void setPn(int pn) {this.pn = pn;}public int getPagesize() {return pagesize;}public void setPagesize(int pagesize) { this.pagesize = pagesize;}public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}}。