DBExchangeMoney类:
1 package com.ch.test15; import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator; import com.ch.test02.Person; /**
* 交换A,B,C的金额
* @author Administrator
*
*/
public class DBExchangeMoney {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//定义数据库驱动器
String DRIVER = "com.mysql.jdbc.Driver";
//加载数据库驱动器
Class.forName(DRIVER);
//定义数据库的链接
String URL = "jdbc:mysql://192.168.1.20:3306/cuihao?useUnicode=true&characterEncoding=UTF-8";
String Users = "root";
String Passw = "root";
java.sql.Connection con = null;
try {
con = DriverManager.getConnection(URL, Users, Passw);
con.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
//PreparedStatement prepStmt = null;
Statement st = null;
ResultSet rs = null;
int tem = 0;
ArrayList<MoneyDefine> list = new ArrayList<MoneyDefine>();
try {
//执行sql查询
String selectStatement = "select * from Moneys";
st = con.createStatement();
rs = st.executeQuery(selectStatement);
while (rs.next()) {
String id = rs.getString("id");
String name = rs.getString("pname");
int moneys = rs.getInt("prices");
String dates = rs.getString("dates");
MoneyDefine md = new MoneyDefine(id,name,moneys,dates);
list.add(md);
}
for(Iterator<MoneyDefine> iterator = list.iterator();iterator.hasNext();){
//错误的,next()在list内,跳到下一条的下一个位置
//System.out.println(iterator.next().getId() +iterator.next().getName()
// +iterator.next().getMoneys() +iterator.next().getDates());
//用对象p接收
MoneyDefine p = iterator.next();
System.out.println("ID:" +p.getId() +" 姓名:" +p.getName()
+" 金额:" +p.getMoneys() +" 时间:" +p.getDates());
// System.out.println(p.getMoneys());
// System.out.println(p.getDates());
} System.out.println("--------------------------");
//two给one 1000; one给two 1000;
//更新
String exchangeMoney = "UPDATE Moneys SET prices=prices+1000 WHERE id=1";
String exchangeMoney1 = "UPDATE Moneys SET prices=prices-1000 WHERE id=2";
st = con.createStatement();
tem = st.executeUpdate(exchangeMoney);
tem = st.executeUpdate(exchangeMoney1);
System.out.println("执行后:" +tem);
//查询更新后的内容
String selectStatement1 = "select * from Moneys";
st = (Statement) con.createStatement();
rs = st.executeQuery(selectStatement1);
while (rs.next()) {
String id = rs.getString("id");
String name = rs.getString("pname");
String moneys = rs.getString("prices");
Date dates = rs.getTimestamp("dates");
System.out.print("ID:" +id);
System.out.print(" 姓名:" +name);
System.out.print(" 金额:" +moneys);
System.out.print(" 时间:" +dates);
System.out.println();
}
System.out.println("--------------------");
} catch (SQLException e) {
con.rollback();
e.printStackTrace();
}
//关闭
con.commit();
rs.close();
st.close();
con.close();
}
}
MoneyDefine类:
1 package com.ch.test15; import java.sql.Timestamp;
import java.util.Date; public class MoneyDefine { public String id;
public String name;
public int moneys;
public String dates; public MoneyDefine(String id, String name, int moneys, String dates){
this.id = id;
this.name = name;
this.moneys = moneys;
this.dates = dates;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getMoneys() {
return moneys;
}
public void setMoneys(int moneys) {
this.moneys = moneys;
}
public String getDates() {
return dates;
}
public void setDates(String dates) {
this.dates = dates;
} }
DBExchangeMoney类中,将从数据库取出的元素放入ArrayList中,然后再从list里取出。
这时遇到问题,当用迭代取元素时
System.out.println(iterator.next().getId() +iterator.next().getName() +iterator.next().getMoneys() +iterator.next().getDates());

执行出行错误。

修改为:

 MoneyDefine p = iterator.next();
System.out.println("ID:" +p.getId() +" 姓名:" +p.getName()+" 金额:" +p.getMoneys() +" 时间:" +p.getDates());

正确输出。

如果每次都调用iterator.next(),则第一次调用iterate.next(),指向List的第一行的getId(),即id=1,第二次调用iterate.next(),就会指向第二行的getName(),即name=two。第三次调用,就会报出异常。所以无法正常输出!

id name prices dates
1 one 0 2015-04-15 11:10:34
2 two 1000 2015-04-15 11:10:40

当iterator.next()应该赋值给一个对象p,然后调用对象p来取值,这样p每次会从每行的首个元素开始迭代。

JDK API 1.6,关于Iterator中next()的说明:

next()

返回迭代的下一个元素。

返回:

迭代的下一个元素。

抛出:

NoSuchElementException - 没有元素可以迭代。

Iterator中的next()的更多相关文章

  1. Iterator中hasNext(), next() 和ResultSet结果集的next方法的区别

    接口 Iterator专门的迭代输出接口,将元素一个个进行判断,用hasNext() 判断是否有值,用next()方法把元素取出.hasNext() 如果仍有元素可以迭代,则返回 true.next( ...

  2. 如何边遍历集合边删除元素--使用Iterator中的remove()方法

    在遍历集合时,想将符合条件的某些元素删除,开始是用了下面的方法 public static void main(String[] args) throws UnsupportedEncodingExc ...

  3. 转:Struts2<s:iterator value="" var="lst">中var的使用和一些标签的使用体会

    比如<s:iterator value="pmOperateList" var="lst"> <!-- iterator加上var 等价于重新 ...

  4. TestNG中的DataProvider返回Iterator<Object[]>的妙用

    TestNG中使用DataProvider有个好处,就是: 1. 在执行用例的时候dataProvider迭代中的每组数据都是作为一个用例执行 2. 在测试数据有规律的情况下,免去了添加testXML ...

  5. struts2中s:iterator 标签的使用详解 及 OGNL用法

    简单的demo: s:iterator 标签有3个属性:value:被迭代的集合id   :指定集合里面的元素的idstatus 迭代元素的索引 1:jsp页面定义元素写法 数组或list <s ...

  6. Java中Iterator类的详细介绍

    迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节. 概述 Java集合框架的集合类,我们有时候称之为容器.容器的种类有很多种,比如ArrayList.Li ...

  7. [转]使用Enumeration和Iterator遍历集合类

    原文地址:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526268.html 前言 在数据库连接池分析的代码实例中,看到其中使用Enume ...

  8. struts2中一些常用的写法 记录

    1.对日期进行处理 Date current = new Date(); java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat ...

  9. C++的模板特化 和 STL中iterator_traits模板的偏特化

    C++中有类模板和函数模板,它们的定义如下所示: 类模板: template<class T1,class T2> class C { //... }; 函数模板: template< ...

随机推荐

  1. day4 DOM,BOM

    1.     BOM编程 1.1. BOM编程基础 全称 Browser Object Model,浏览器对象模型. JavaScript是由浏览器中内置的javascript脚本解释器程序来执行ja ...

  2. Python 如何连接并操作 Aws 上 PB 级云数据仓库 Redshift

    Python 如何连接并操作 Aws 上 PB 级云数据仓库 Redshift 一.简介 Amazon Redshift 是一个快速.可扩展的数据仓库,可以简单.经济高效地分析数据仓库和数据湖中的所有 ...

  3. LightOJ - 1234 LightOJ - 1245 Harmonic Number(欧拉系数+调和级数)

    Harmonic Number In mathematics, the nth harmonic number is the sum of the reciprocals of the first n ...

  4. UVa 10213 How Many Pieces of Land ? (计算几何+大数)欧拉定理

    题意:一块圆形土地,在圆周上选n个点,然后两两连线,问把这块土地分成多少块? 析:这个题用的是欧拉公式,在平面图中,V-E+F=2,其中V是顶点数,E是边数,F是面数.对于这个题只要计算V和E就好. ...

  5. ListView Item 里多种点击事件的用法

    思路:由于item里需要处理多种点击事件,所以不便于用listview的onItemClickListener,  需要在adapter里进行设置不同点击区域的onclicklistener 但是,有 ...

  6. 在element-ui的表格组件中为表头添加Tooltip 文字提示

    在使用表格组件的时候经常遇到的问题,列数很多,而表头的文字描述长度很长 <el-table-column v-if="!column.event" v-for="( ...

  7. CODING 告诉你硅谷的研发项目管理之道(5)

    CODING 已经通过前四期文章,让大家逐步了解了一些硅谷优秀的项目管理者是如何工作.如何维持团队高效运作的.在过去的十几年中,中国的互联网行业发展过于迅猛,导致很多管理人员都是赶鸭子上架,商场如战场 ...

  8. IP服务-8-WCCP

    WCCP(网页缓存通信协议) 内容引擎负责将频繁访问的数据收集到本地,通常是HTTP流量,当主机访问相同页面时,可以直接通过内容引擎为主机提供相应内容,而无需通过WAN进行访问.WCCP与网页代理并不 ...

  9. Jmeter (二十六)逻辑控制器 之 Module Controller and Include Controller

    Module Controller ---模块控制器 测试计划设置“独立运行没每个线程组” 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disa ...

  10. C/C++<算法>进制转换超详细

    16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...