1. 基本上 每一个工程都会用到登录日志的
所以 登录 作为 一种 常态 必须要掌握
接口 实现类,其中的 麻烦仅仅就是一个 类型之间的转化
public class LoginLogDaoimpl implements ILoginLogDao {
DBManager db=new DBManager();
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@Override
public int Add(LoginLog entity) throws SQLException {
String sql="insert into loginlog values(?,getdate(),?)";
Object [] objs={entity.getUname(),entity.getLoginip()};
int iline = db.MyExecuteUpdate(sql, objs);
return iline;
}
调用时 只要 把 entity 中的 每一个 属性的 类型 搞对,传入 即可,
entity 中的 属性值 可能由 用户 自己 输入 或者 是 部分 是 从userInfo 中而来
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public List<LoginLog> getAll() throws SQLException {
String sql="select * from Loginlog";
List<LoginLog> LoginLogList=new ArrayList<LoginLog>();
LoginLog log=new LoginLog();
ResultSet rst=Db.MyExecuteQuery(sql, objs);
while(rst.next() ){
int id=rst.getInt("id");
String uname=rst.getString("uname");
————————————————————————————————————————————
遇到 了 sql 的 date 转化为 java 中的 date
// Date logintime=rst.getString("logintime"); 错误的
sql ------------ java
datetime ------------ TIMESTAMP
所以 是
这里所有时间日期都可以被SimpleDateFormat格式化format()
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
TIMESTAMP Ttime=(TIMESTAMP)rst.getObject("logintime");
1.1 SQL.date-------> String
String 获得的 Stringtime=sdf.formate(Ttime);
1.2 String ---------->Util.date
Date datetime = sdf.parse(Stringtime);
java.util.Date 是 java.sql.Date 等三个的父类
1.3 String------------》 Timestamp
使用Timestamp的valueOf()方法
Timestamp ts = new Timestamp(System.currentTimeMillis());
String tsStr = "2011-05-09 11:49:45";
ts = Timestamp.valueOf(tsStr);
1.4 Timestamp----------》String
String tsStr =“”;
Sring类型 tsStr = sdf.format(Timestamp类型 );
或者
tsStr = Timestamp.toString(); ---任何 的 类型都可以 这样 变
**如果 不想 多转化一步, 在 每一个 entity 中 就直接 使用 sql.Date 类型
————————————————————————————————————————
String loginip=rst.getString("loginip");
log=new LoginLog(id,uname, datetime , loginip);
LoginLogList.add(log);
}
return LoginLogList;
}
}
》》》》》》》》》》》》》》》》》》》
2.1登录验证的问题
1.银行卡 是 你把 卡放进去,
2.卡号 被读卡器 扫描出 一串 字符串--
3. 字符串 这是 会与 数据库 中的 卡号对比,---
4. 如果存在,则给你 一个 输入框 输密码,并且这是 卡号对应的 信息和 密码 已经查询出来,
5. 判断 你的 输入的密码 是否 和 查询出来的 一样,
6. 正确 就会 进入 另一个 界面了
7. 取款 转账 存款 退出 里面 又会 有很多的 子选项
8. 按了 退出, 就会 给 读卡器一个 信号, 读卡器 把卡 吐出来
》》》》》》》》》》》》》》》》》》》》》》》》》》》》
3.1验证 卡号的 存在
public boolean validateAccount(String cardNO){
boolean flag=false;
String sql="select * from account where cardNO=?";
con=DBManager.getCon();
pst=con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,cardNO
ResultSet.CONCUR_READ_ONLY);
pst.setString(1,cardNO);
rst=pst.executeQuery();
if(rst.next()){
flag=true;
}
else{
flag=false;
}
return flag
——————————————————————————————
3.3 主界面的 问题, 可以 写在一起,也不要紧, 用于 可以 一直循环的 调用显示
public class AccountDao {
private Connection con=null;
private CallableStatement cst=null;
String cardNo;
Scanner sc=new Scanner(System.in);
//获取银行卡号
public String getCardNO(){
System.out.print("请输入银行卡号:");
cardNo=sc.next();
return cardNo;
}
//菜单
public void menu() throws Exception{
while(true){
System.out.println("[1]开户 [2]存款");
System.out.println("[3]取款 [4]转账");
System.out.println("[5]查看余额 [6]退出系统");
System.out.println("----------------------------------------");
System.out.println("请选择如下操作:");
int x=sc.nextInt();
switch(x){
case 1:
this.openAccount();
break;
case 2:
this.insertMoney();
break;
case 3:
this.drawMoney();
break;
case 4:
this.transMoney();
break;
case 5:
this.searchBalance();
break;
case 6:
System.exit(0);
break;
}
}
}
//开户
public void openAccount() {
System.out.println("请输入姓名:");
String name=sc.nextLine();
System.out.println("请输入身份证号码:");
String passportID=sc.nextLine();
System.out.println("请输入电话号码:");
String telephone=sc.nextLine();
System.out.println("请输入卡号:");
String cardNO=sc.nextLine();
try {
con=DBManager.getCon();
con.setAutoCommit(false);
存储 过程
cst=con.prepareCall("{call bankpro(?,?,?,?)}");
cst.setString(1, name);
cst.setString(2, passportID);
cst.setString(3, telephone);
cst.setString(4, cardNO);
cst.execute();
con.commit();
提交 这个
System.out.println("开户成功");
}
catch (Exception e) {
try {
con.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.println("开户失败");
e.printStackTrace();
}
finally{
DBManager.closeStatement(cst);
DBManager.closeCon(con);
}
}
//存款
public void insertMoney(){
System.out.println("请输入存入金额:");
float money=sc.nextFloat();
try {
con=DBManager.getCon();
con.setAutoCommit(false);
cst=con.prepareCall("{call insertpro(?,?)}");
cst.setFloat(1, money);
cst.setString(2, cardNo);
cst.execute();
con.commit();
System.out.println("存款成功");
}
catch (Exception e) {
try {
con.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.println("存款失败");
e.printStackTrace();
}
finally{
DBManager.closeStatement(cst);
DBManager.closeCon(con);
}
}
//取款
public void drawMoney(){
System.out.println("请输入取出金额:");
float money=sc.nextFloat();
try {
if(money>this.searchBalance()){
throw new Exception("账户余额不足");
}
con=DBManager.getCon();
con.setAutoCommit(false);
cst=con.prepareCall("{call drawpro(?,?)}");
cst.setFloat(1, money);
cst.setString(2, cardNo);
cst.execute();
con.commit();
System.out.println("取款成功");
}
catch (Exception e) {
try {
con.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.println("取款失败");
e.printStackTrace();
}
finally{
DBManager.closeStatement(cst);
DBManager.closeCon(con);
}
}
//转账
public void transMoney(){
System.out.println("请输入转账金额:");
float tran=sc.nextFloat();
String fromcardNO=cardNo;
System.out.println("请输入转进银行账号:");
String tocardNo=sc.next();
try{
if(tran>this.searchBalance()){
throw new Exception("账户余额不足");
}
ATMDao dao=new ATMDao();
if(dao.judgeAccount(tocardNo)==true){
con=DBManager.getCon();
con.setAutoCommit(false);
cst=con.prepareCall("{call tranpro(?,?,?)}");
cst.setFloat(1, tran);
cst.setString(2, fromcardNO);
cst.setString(3, tocardNo);
cst.execute();
con.commit();
System.out.println("转账成功");
}
else
throw new Exception("银行卡号不存在");
}
catch(Exception e){
try {
con.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.println("转账失败");
e.printStackTrace();
}
finally{
DBManager.closeStatement(cst);
DBManager.closeCon(con);
}
}
//查看余额
public float searchBalance(){
float balance=0;
try {
con=DBManager.getCon();
con.setAutoCommit(false);
cst=con.prepareCall("{call searchpro(?,?)}");
cst.setString(1, cardNo);
cst.registerOutParameter(2, java.sql.Types.FLOAT);
cst.execute();
balance=cst.getFloat(2);
System.out.println("余额为:"+balance);
System.out.println("----------------------------------------");
con.commit();
}
catch (Exception e) {
try {
con.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
System.out.println("查询失败");
e.printStackTrace();
}
finally{
DBManager.closeStatement(cst);
DBManager.closeCon(con);
}
return balance;
}
}