java数据库操作问题(上一条数据、下一条数据)

作者&投稿:蛮购 (若有异议请与网页底部的电邮联系)
java 在数据库中如何查询一条记录~

1.可以用离线查询,就是先把数据都取出来,再用list操作。
2.实时查询,每次查询5条记录,即第一条,下一条,当前记录,前一条,最后一条。这样就有了每条记录的id号,再提交按钮的是后直接用java查询,重复即可。

两种方式:
数据库分页,size=1,点击按钮页数+1,每次去数据库查询(效率较慢,不推荐)
利用java队列(queue),把数据查出来放在队列中,点击按钮移除队列末端元素,这样每次都取出第一条最新数据。
前端如果要做滚屏的话,可以用CSS3特性,或者使用一些滚动插件

给你个思路吧:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'list.jsp' starting page</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style>
.row0{
background: #AABBFF;
}
.row1{
background: #FFAABB;
}
</style>
</head>
<body>
<div><span style="color:red;">请用list.action访问该页面</span></div>
<table width="100%" border="1px solid black" cellpadding="0" cellspacing="0">
<caption>用户列表及操作</caption>
<thead>
<tr>
<th width="20%">ID</th>
<th width="20%">用户名</th>
<th width="20%">密码</th>
<th width="20%">是否可用</th>
<th width="20%">操作</th>
</tr>
</thead>
<tbody>
<s:iterator value="%{users}" status="s">
<tr class="row${s.index%2 }">
<td>${id }</td>
<td>${username }</td>
<td>${password }</td>
<td>${valid }</td>
<td>
<a href="delete.action?id=${id }&p.page=${p.page }" onclick="return confirm('确定删除?')">删除</a>
<a href="load.action?id=${id }&p.page=${p.page }">修改</a>
</td>
</tr>
</s:iterator>
</tbody>
</table>
<div>
<form action="list.action">
<s:if test="%{p.page != 1}">
<a href="list.action?p.page=1">首页</a>
</s:if>
<s:else>
<a style="color:#ccc;">首页</a>
</s:else>
<s:if test="%{p.page != 1}">
<a href="list.action?p.page=${p.page-1 }">上一页</a>
</s:if>
<s:if test="%{p.page != p.totalPage}">
<a href="list.action?p.page=${p.page+1 }">下一页</a>
</s:if>
<s:if test="%{p.page != p.totalPage}">
<a href="list.action?p.page=${p.totalPage }">末页</a>
</s:if>
<s:else>
<a style="color:#ccc;">末页</a>
</s:else>
<span>第${p.page }页/共${p.totalPage }页</span>
<span>跳<input id="page" name="p.page" style="width:30px;">页</span>
<input type="submit" value="go">
</form>
</div>
<div>
<input type="button" value="添加用户" onclick="window.location='add.jsp'"/>
</div>
</body>
</html>

package com.action;
import java.util.ArrayList;
import java.util.List;
import com.dao.UserDao;
import com.dao.UserDaoImpl;
import com.opensymphony.xwork2.ActionSupport;
import com.pojo.User;
import com.util.Pagination;
public class UserAction extends ActionSupport{
private UserDao dao = new UserDaoImpl();
private List<User> users = new ArrayList<User>();
private User user;
private int id;
private Pagination p = new Pagination();
public String list(){
System.out.println("======================list.action");
try {
System.out.println("list:"+p.getPage()+p.getPageSize());
dao.getMaxPage(p);
users = dao.list(p);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "failed";
}
public String add(){
System.out.println("======================add.action");
try {
dao.add(user);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "failed";
}
public String delete(){
System.out.println("======================delete.action");
try {
dao.delete(id);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "failed";
}
public String load(){
System.out.println("======================load.action");
try {
user = dao.findUserById(id);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "failed";
}
public String modify(){
System.out.println("======================modify.action");
try {
user.setId(id);//设置user的id为所要修改的id
dao.update(user);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "failed";
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Pagination getP() {
return p;
}
public void setP(Pagination p) {
this.p = p;
}
}

package com.util;
/**
* 分页
* @author yun
*
*/
public class Pagination {
private int pageSize = 3;//每页显示几条数据
private int totalPage = Integer.MAX_VALUE;//共多少页
private int page = 1;//第几页
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if(pageSize <= 0){
pageSize = 3;
}
this.pageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
if(totalPage <=0){
totalPage = 1;
}
this.totalPage = totalPage;
//下面的setPage(page)一定要有,因为totalPage是查询出来的,这会影响page的值。
//如:原来有12页数据,现在查询出来的只有2页,那么page大于2的页应该就不存在了
setPage(page);
}
public int getPage() {
return page;
}
public void setPage(int page) {
System.out.println("=========totalPage:"+totalPage);
if(page <= 0){
page = 1;
}
if(page > totalPage){
page = totalPage;
}
this.page = page;
}
}

package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.pojo.User;
import com.util.DBUtil;
import com.util.Pagination;
public class UserDaoImpl implements UserDao {
public void add(User u) throws Exception {
int id = searchMaxId();//获得id值,相当于id = seq.nextval()
System.out.println("获得id值=============="+id);
u.setId(id);
String sql = "insert into s_user(id,username,password,valid) " +
" values(?,?,?,?)";
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, u.getId());
pstmt.setString(2, u.getUsername());
pstmt.setString(3, u.getPassword());
pstmt.setString(4, u.getValid());
System.out.println("打印sql:"+sql+"参数:["+u.getId()+","+u.getUsername()+","+u.getPassword()+","+u.getValid()+"]");
pstmt.executeUpdate();
DBUtil.close(pstmt);
DBUtil.close(conn);
}
/**
* 查询记录中最大的id,如果没有就默认为1,有就+1返回
* @return
*/
private int searchMaxId() {
int id = 1;
String sql = "select max(id) mid from s_user";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
stmt = conn.createStatement();
System.out.println("打印sql:"+sql);
rs = stmt.executeQuery(sql);
if(rs.next()){
id = rs.getInt("mid")+1;//有结果,就+1
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return id;
}
public void delete(int id) throws Exception {
String sql = "delete from s_user where id = ?";
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
System.out.println("打印sql:"+sql+"参数:["+id+"]");
pstmt.executeUpdate();
DBUtil.close(pstmt);
DBUtil.close(conn);
}
public User findUserById(int id) throws Exception {
User u = null;
String sql = "select * from s_user where id = ?";
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
System.out.println("打印sql:"+sql+"参数:["+id+"]");
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
u = new User();
u.setId(rs.getInt("id"));
u.setUsername(rs.getString("username"));
u.setPassword(rs.getString("password"));
u.setValid(rs.getString("valid"));
}
DBUtil.close(rs);
DBUtil.close(pstmt);
DBUtil.close(conn);
return u;
}
public List<User> list() throws Exception {
List<User> list = new ArrayList<User>();
String sql = "select id,username,password,valid from s_user order by id";
Connection conn = DBUtil.getConnection();
Statement stmt = conn.createStatement();
System.out.println("打印sql:"+sql);
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String valid = rs.getString("valid");
User u = new User();
u.setId(id);
u.setUsername(username);
u.setPassword(password);
u.setValid(valid);
list.add(u);
}
DBUtil.close(rs);
DBUtil.close(stmt);
DBUtil.close(conn);
return list;
}
public List<User> list(Pagination p) throws Exception {
List<User> list = new ArrayList<User>();
String sql = "select * from (select ini.*,rownum rn from " +
"(select id,username,password,valid from s_user order by id) ini " +
"where rownum <= ?) where rn >= ? ";
int begin = p.getPageSize()*(p.getPage()-1)+1;//10*(3-1)+1=21 1-10 11-20 21-30
int end = p.getPageSize()*p.getPage();//10*3=30
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, end);
pstmt.setInt(2, begin);
System.out.println("打印sql:"+sql+"参数:["+end+","+begin+"]");
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String valid = rs.getString("valid");
User u = new User();
u.setId(id);
u.setUsername(username);
u.setPassword(password);
u.setValid(valid);
list.add(u);
}
DBUtil.close(rs);
DBUtil.close(pstmt);
DBUtil.close(conn);
return list;
}
public void update(User u) throws Exception {
String sql = "update s_user set username=?,password=?,valid=? where id=?";
Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, u.getUsername());
pstmt.setString(2, u.getPassword());
pstmt.setString(3, u.getValid());
pstmt.setInt(4, u.getId());
System.out.println("打印sql:"+sql+"参数:["+u.getUsername()+","+u.getPassword()+","+u.getValid()+","+u.getId()+"]");
pstmt.executeUpdate();
DBUtil.close(pstmt);
DBUtil.close(conn);
}
/**
* 设置最大页
* @param p
* @throws SQLException
*/
public void getMaxPage(Pagination p) throws SQLException{
String sql = "select count(*) from s_user";
Connection conn = DBUtil.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()){
int s = rs.getInt(1);//一共有多少条数据
int n = p.getPageSize();//每页大小
int t = (s+n-1)/n;
p.setTotalPage(t);//共有多少页
}
DBUtil.close(rs);
DBUtil.close(stmt);
DBUtil.close(conn);
}
/**
* 测试UserDaoImpl
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
UserDaoImpl impl = new UserDaoImpl();
int size = impl.list().size();
System.out.println("size======"+size);//size======0
}
}

 

总体来说,这是一个翻页查询问题。

上一条,下一条如果是两个按钮的话,就要写javascript去异步发送请求了,请求时来带上参数,参数为当前的页数减一(上一条),或加一(下一条)。然后就是写查询语句了。

如:

public List<User> list(Pagination p) throws Exception {

  List<User> list = new ArrayList<User>();

  String sql = "select * from (select ini.*,rownum rn from " +

    "(select id,username,password,valid from s_user order by id) ini " +

    "where rownum <= ?) where rn >= ? ";

  int begin = p.getPageSize()*(p.getPage()-1)+1;//10*(3-1)+1=21  1-10 11-20 21-30

  int end = p.getPageSize()*p.getPage();//10*3=30

  Connection conn = DBUtil.getConnection();

  PreparedStatement pstmt = conn.prepareStatement(sql);

  pstmt.setInt(1, end);

  pstmt.setInt(2, begin);

  System.out.println("打印sql:"+sql+"参数:["+end+","+begin+"]");

  ResultSet rs = pstmt.executeQuery();

  while(rs.next()){

   int id = rs.getInt("id");

   String username = rs.getString("username");

   String password = rs.getString("password");

   String valid = rs.getString("valid");

   User u = new User();

   u.setId(id);

   u.setUsername(username);

   u.setPassword(password);

   u.setValid(valid);

   list.add(u);

  }

  DBUtil.close(rs);

  DBUtil.close(pstmt);

  DBUtil.close(conn);

  return list;

 }

 

 

 

 

 

 

 

 

 

 

 

同理,还是要去查询,然后得到两条记录,还是要传参数的。



要么使用分页查询,要么你做缓存把几条数据存下来,点击一次取一次。

传递参数控制查询的数据啊!!!

关于java操作数据库锁的问题
答:1. 使用synchronized同步该查询方法 2. 使用select * from tablename for update,但并非所有数据库都会提供支持

JAVA操作数据库
答:java连数据库 说一下用的多的 jdbc吧 首先注册jdbc和相关数据库的驱动比如oracle数据库 Class.forName("oracle.jdbc.OracleDiver");创建连接 对应数据库的url url = "jbbc:oracle;thin:@localhot:1521:ora9i" ora9i是数据库的sid Connection conn = DriverManger.getConnection(url,username,pwd);然后...

JAVA应用数据库的问题。
答:确定之后,Tools-->Database Pilot-->New的Driver里选择 com.microsoft.jdbc.sqlserver.SQLServerDriver 在URL里填入:microsoft:sqlserver://服务器Ip地址或主机名:1433;DatabaseName=数据库名,确定!双击或点击+号输入sql数据库的用户名和密码,就完成了JB与sql的连接!连接代码可以查看Source!

java操作其它机器共享的access数据库,做插入操作的时候 报错:“操作...
答:1、win2k win2003 系统 问题应该是服务器数据库目录的写入权限没有设置好。数据库目录 属性 安全 EVERYONE ……给他写入权限就OK了。2、winXP系统 XP操作系统安装好,文件夹选项里面默认使用简单共享(推荐),把这个选项去掉,再在文件夹上右键点击,就会出现安全这个选项卡,原来默认的没有,然后在安全...

java连接数据库查询结果不显示第一条
答:这个其实很简单的`弄清楚next()的功能与处理机制就行了``rs.next()后,结果集中的游标首先判断结果集中是否还有下一条记录,如果有游标定位到下一条记录位置上``你上面代码在取数据前next()两次,所以是从第二条记录取数据`

java 执行数据库语句的问题。
答:stmt没有初始化,stmt=null,调用stmt的executeQuery方法出现空指针异常。应该先初始化stmt,Class.forName("org.gjt.mm.mysql.Driver").newInstance();String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicod e=true&characterEncoding=8859_1"//myDB为数据库名 Connection ...

java操作数据库取值问题
答:public List<String> speciesname(){ String speciesname = null;List<String> list = new ArrayList<String>(); //声明一个集合存放 speciesname Connection connect = null;ResultSet result_sql = null;try { Class.forName("com.mysql.jdbc.Driver");connect = DriverManager.getConnection("...

java面试项目中遇到的问题与解决
答:解答: 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。常见的设计模式包括单例模式、工厂模式、观察者模式等。单例模式确保一个类只有一个实例,工厂模式用来创建对象,观察者模式定义了一种一对多的依赖关系。7. 问题:如何在Java中进行数据库操作?解答: 在Java中,...

java 访问数据库问题,插入不了记录
答:因为你要录入的数据是变量的值,而不是变量的名字,像这样用单引号引起变量,数据库会将变量的名字作为值来进行插入。应该如下这样——"insert into message values ('" + num + "','" + nam + "','" + nowTime + "','" + fl + "')"组合好后,可以在控制台打印出来看看有没有错。...

java中使用JDBC完成数据库操作的基本步骤是什么?
答:创建一个以JDBC连接数据库的程序,包含7个步骤:1、加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。例如:try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ;}catch(...