5、原生jdbc链接数据库实例-自动取款机
ATM自动取款机需求
一.登陆
1.界面要求:服务选择
1.老用户登陆:进入后输入卡号密码登陆
2.新用户开户:开户需要输入身份证号,记录姓名,开户时间。然后机器给出卡号,原始密码:111111。
卡号:当前系统时间的毫秒数:new Date().getTime();
卡号=“ICBC”+毫秒数; 二.服务选择
用户登陆后显示服务选择菜单:存款,取款,汇款,修改密码,查看余额。
将五个功能写成五个方法,在菜单选项中去调用
三.存款
此操作是已登录用户,输入存款金额,直接打到用户的账户上 //可以在登陆或者新建用户时将卡号设置为全局变量保存,随时可以调用
四.取款
此操作是已登录用户,输入取款金额,判断是否有足够余额,直接从用户的账户取出(要求:每次不大于3000,每天不超过5w)
1.查询余额。
2.判断当次金额3000以内
3.查询操作记录表:查询当天取款总金额
4.把查询出的总金额+当前要取款金额>1w
5.取款成功后记录本次操作:
五.汇款
此操作是已登录用户,输入汇款人账号,显示汇款人信息,确认后再输入金额,判断余额是否足够,然后打款。(要求单笔金额上限5000,每天不超过10w)
1.查询汇款人信息:
2.确认后,再查询当前用户余额是否足够:
3.判断当次金额5000以内
4.查询操作记录表:查询当天汇款总金额
5.把查询出的总金额+当前要取款金额>1w
6.汇款成功后记录本次操作: 六.修改密码(密码必须是6位)
此操作是已登录用户,进入修改密码服务,提示输入原始密码,提示输入新密码,提示再次确认,然后修改成功
七.查看余额
此操作是已登录用户,查看当前账户的余额。
八.退卡操作:此操作后需要重新登录或者回到最起始界面。其他功能操作完后都回到服务选择菜单。 附加功能:1.对账单 2.用户数据备份 3.用户数据恢复
1.对账单:用户能够查询自己的交易记录,并生成txt文档保存
要求:用户输入起止日期,得到txt对账单
对账单格式如下:
卡号:123902939928989182
日期:2015-09-15-----2015-09-30
操作时间 操作类型 交易金额
2015-09-15 12:12:12 存款 +10000
2015-09-30 11:11:11 汇款 -5000
…………………
汇总:
存款:+25423
取款:-22221
汇款:-12233 2.用户数据备份
要求:将所有用户信息写入到xml文档保存
Xml格式如下:
<users>
<user id="1">
<!-- 卡号 -->
<cardid>87348719283389382983</cardid>
<!-- 身份证 -->
<sfzid>430909203920901233</sfzid>
<!-- 开户时间 -->
<createtime>2011-09-09 23:12:12</createtime>
<!-- 余额 -->
<balance>20933.22</balance>
<!-- 密码 -->
<password>998822</password>
</user>
<users> 3.用户数据恢复
将保存的xml文档里面的数据还原到数据库中
设计表
建表
drop table user_info
drop table operate_info select * from user_info;
select * from user_infobak;
select * from type_info;
select * from operate_info; delete from user_infobak; --创建用户表
create table user_info(
user_id number primary key,
user_cardnum varchar2(30) not null unique,
user_name varchar2(30),
user_idcard varchar2(30) not null,
user_password char(6) default '',
user_opentime date,
user_money number(18,2) check(user_money>0 or user_money=0) not null,
user_status char(1)
) --创建操作类型表
create table type_info(
type_id number primary key,
type_name varchar2(30) not null
) --创建操作记录表
create table operate_info(
operate_id number primary key,
operate_time date not null,
operate_money number(15) not null,
user_cardnum varchar2(30),
second_cardnum varchar2(30),
type_id number,
foreign key (user_cardnum) references user_info (user_cardnum),
foreign key (type_id) references type_info (type_id)
) --分别创建操作类型表、操作记录表序列
create sequence sq_user nocache;
create sequence sq_type nocache;
create sequence sq_operate nocache; --在码表中加入数据
insert into type_info values(sq_type.nextval,'存款');
insert into type_info values(sq_type.nextval,'取款');
insert into type_info values(sq_type.nextval,'汇款'); --1.1新用户开户(开户时就会自动存款10元)
insert into user_info values
('ICBC'||to_char((sysdate-to_date('1970-01-01','yyyy-mm-dd'))*86400000),'宋江','',123456,sysdate,10);
--1.1老用户登录
select * from user_info where user_cardno='ICBC1512573295000' and user_password=''; --2.1存款
开发后的文件目录
dao层、service、pojo类代码就不贴出了,这里仅贴出view层代码。。。。
Menu.java
/*
* 主菜单
* 1.负责展示数据
* 2.负责收集用户数据
* 3.负责与用户交互
*/
package com.view; import java.util.Scanner; public class Menu {
LoginIn loginin;//登录类对象
Function function;//服务类对象
AddFuction addfuction;//附加功能对象 public static void main(String[] args) {
Menu menu=new Menu();
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("请选择:");
System.out.println("1.用户服务");
System.out.println("2.附加功能");
switch(sc.nextInt()){
case 1:
menu.loginin();
menu.function();
break;
case 2:
menu.addfuction();
break;
default:
System.out.println("输入有误,请重新输入!");
break;
}
System.out.println("是否继续:y/n");
if(!"y".equals(sc.next())){
break;
}
}
System.out.println("操作结束,欢迎您再次使用"); } public Menu(){
System.out.println("====欢迎使用ATM自动取款机====");
} //1.登录选择
public void loginin(){
loginin=new LoginIn();
boolean b1=true;
while(b1){
int i=loginin.start();
switch(i){
case 1:
loginin.login();
if(loginin.user==null){
System.out.println("对不起,登录失败,请重试!");
}else{
System.out.println("恭喜您,登录成功!");
b1=false;
}
break;
case 2:
loginin.register();
if(loginin.user==null){
System.out.println("对不起,开户失败,请重试!");
}else{
System.out.println("恭喜您,开户成功!");
b1=false;
}
break;
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
} //2.功能选择
public void function(){
function=new Function(loginin.user,loginin.userSer);
boolean b2=true;
while(b2){
int j=function.start();
switch(j){
case 1:
if(function.deposit()){
System.out.println("存款成功!");
}else{
System.out.println("操作失败,请重试!");
}
break;
case 2:
if(loginin.user.getUser_status()==1){
System.out.println("卡已冻结,无法取款!");
break;
}
if(function.withdrawal()){
System.out.println("取款成功!");
}
break;
case 3:
if(loginin.user.getUser_status()==1){
System.out.println("卡已冻结,无法汇款!");
break;
}
if(function.remit()){
System.out.println("汇款成功!");
}
break;
case 4:
if(loginin.user.getUser_status()==1){
System.out.println("卡已冻结,无法修改密码!");
break;
}
if(function.changepw()){
System.out.println("密码修改成功!");
}
break;
case 5:
function.showmoney();
break;
case 6:
function.quit();
System.out.println("您已退出!");
b2=false;
break;
case 7:
if(loginin.user.getUser_status()==1){
System.out.println("卡已冻结,无法查询账单!");
break;
}
function.statement();
break;
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
} //3.附加功能选择
public void addfuction(){
addfuction=new AddFuction();
int t = addfuction.start();
switch (t) {
case 1:
try {
if (addfuction.backup()) {
System.out.println("数据备份成功!");
} else {
System.out.println("数据备份失败!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 2:
try {
if (addfuction.recover()) {
System.out.println("数据恢复成功!");
} else {
System.out.println("数据恢复失败!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
System.out.println("输入有误,请重新输入!");
break;
}
}
}
LoginIn.java
/*
* 用户登录或注册类
*/
package com.view; import java.util.Scanner; import com.pojo.*;
import com.service.*; public class LoginIn {
Scanner sc=new Scanner(System.in);
IUserService userSer = new UserService();
User_info user; //登录选择界面
public int start(){
System.out.println("请选择服务:");
System.out.println("1.老用户登录");
System.out.println("2.新用户开户");
int i=sc.nextInt();
return i;
} //1.老用户登录
public void login(){
System.out.println("您当前选择的是:登录操作");
System.out.println("请输入卡号:");
String cardnum=sc.next();
System.out.println("请输入密码:");
String password=sc.next();
user=userSer.userlogin(cardnum, password);
} //2.新用户开户
public void register(){
System.out.println("您当前选择的是:开户操作");
System.out.println("请输入身份证号码:");
String idcard=sc.next();
System.out.println("请输入您的姓名:");
String name=sc.next();
user=userSer.userOpenAccount(idcard, name);
}
}
Function.java
/*
* 用户选择的服务功能类
*/
package com.view; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner; import com.pojo.*;
import com.service.*; public class Function {
Scanner sc=new Scanner(System.in);
IUserService userSer;
IOperateService operateSer=new OperateService();
ITypeService typeSer=new TypeService();
User_info user; public Function(User_info user,IUserService userSer){
this.user=user;
this.userSer=userSer;
} //选择界面
public int start(){
System.out.println("请选择相关服务类型:");
System.out.println("1.存款");
System.out.println("2.取款");
System.out.println("3.汇款");
System.out.println("4.修改密码");
System.out.println("5.查看余额");
System.out.println("6.退卡");
System.out.println("7.对账单");
int i=sc.nextInt();
return i;
} //1.存款方法
public boolean deposit(){
System.out.println("您当前选择的是:存款操作");
System.out.println("请输入金额:");
int money=sc.nextInt();
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//存款
if(userSer.userDeposit(money)){
//保存操作信息
if(operateSer.saveOperatemessage(money, user.getUser_cardnum(), null,1)){
return true;
}
}
return false;
} //2.取款方法
public boolean withdrawal(){
System.out.println("您当前选择的是:取款操作");
System.out.println("请输入金额:");
int money=sc.nextInt();
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//查看余额
if(userSer.userCheckBalance()<money){
System.out.println("余额不足,取款失败!");
return false;
}
//每次取款在3000以内
if(money>3000){
System.out.println("取款失败,当次取款金额不能大于3000!");
return false;
}
//查询当天已取款总金额
if(operateSer.todayAllwithdrawal(user.getUser_cardnum())+money>50000){
System.out.println("取款失败,每天取款金额不能超过50000!");
return false;
}
//取款
if(userSer.userWithdrawal(money)){
//保存操作信息
if(operateSer.saveOperatemessage(money, user.getUser_cardnum(), null,2)){
return true;
}
}
System.out.println("取款失败,请重试!");
return false;
} //3.汇款
public boolean remit(){
System.out.println("您当前选择的是:汇款操作");
System.out.println("请输入对方卡号:");
String secardnum=sc.next();
System.out.println("您要汇款的卡号为:"+secardnum+",请确认:y/n");
String s=sc.next();
if(!"y".equals(s)){
System.out.println("交易结束!");
return false;
}
System.out.println("请输入金额:");
int money=sc.nextInt();
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//查看余额
if(userSer.userCheckBalance()<money){
System.out.println("余额不足,汇款失败!");
return false;
}
//每次汇款在3000以内
if(money>5000){
System.out.println("汇款失败,当次汇款金额不能大于5000!");
return false;
}
//查询当天已汇款总金额
if(operateSer.todayAllremit(user.getUser_cardnum())+money>100000){
System.out.println("汇款失败,每天汇款金额不能超过100000!");
return false;
}
//汇款
if(userSer.userRemit(secardnum,money)){
//保存操作信息
if(operateSer.saveOperatemessage(money, user.getUser_cardnum(),secardnum,3)){
return true;
}
}
System.out.println("汇款失败,请重试!");
return false;
} //4.修改密码
public boolean changepw(){
System.out.println("您当前选择的是:修改密码操作!");
System.out.println("请输入旧密码:");
String oldpassword=sc.next();
if(!user.getUser_password().equals(oldpassword)){
System.out.println("您输入的密码有误,操作结束!");
return false;
}
System.out.println("请输入新密码:");
String newpassword1=sc.next();
System.out.println("请确认新密码:");
String newpassword2=sc.next();
if(!newpassword1.equals(newpassword2)){
System.out.println("您两次输入的密码不一致,密码修改失败!");
return false;
}
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//修改
if(userSer.userChangePasswd(oldpassword, newpassword2)){
return true;
}
System.out.println("密码修改失败!");
return false;
} //5.查看余额
public void showmoney(){
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("您当前余额为"+userSer.userCheckBalance()+"元");;
} //6.退卡
public void quit(){
user=null;
userSer.userQuit();
} //7.对账单
public void statement(){
List<Operate_info> operlist=new ArrayList<>();
System.out.println("请输入起始日期:yyyy-MM-dd");
String startdate=sc.next();
System.out.println("请输入终止日期:yyyy-MM-dd");
String enddate=sc.next();
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
operlist=operateSer.queryRecord(user.getUser_cardnum(), startdate, enddate);
String path="src/com/view/"+user.getUser_name()+".txt";
//调用写文件方法
if(writef(path,operlist)){
System.out.println("交易记录查询成功!");
}else{
System.out.println("找不到相应记录!");
} } //8.写账单到文件中
public boolean writef(String path,List<Operate_info> operlist){
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
File file=new File(path);
BufferedWriter bw=null;
StringBuilder sb=new StringBuilder();
try {
//如果文件不存在,就创建一个新文件
if(!file.exists()){
file.createNewFile();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将记录添加到sb中
if(operlist!=null){
String s1="卡号:"+operlist.get(0).getUser_cardnum();
String s2="日期:"+sdf1.format(operlist.get(0).getOperate_time())+
"------"+sdf1.format(operlist.get(operlist.size()-1).getOperate_time());
String s3="操作时间\t"+"操作类型\t"+"操作金额";
//将卡号日期添加到sb中
sb.append(s1+"\r\n"+s2+"\r\n"+s3+"\r\n");
int all1=0;
int all2=0;
int all3=0;
//将交易记录添加到sb中
for(Operate_info oper:operlist){
String ss="";
String oo="";
switch(oper.getType_id()){
case 1:
ss="存款";
oo="+";
all1+=oper.getOperate_money();
break;
case 2:
ss="取款";
oo="-";
all2+=oper.getOperate_money();
break;
case 3:
ss="汇款";
oo="-";
all3+=oper.getOperate_money();
break;
}
String s4=sdf2.format(oper.getOperate_time())+"\t"+ss+"\t"+oo+oper.getOperate_money();
sb.append(s4+"\r\n");
}
//汇总
String s4="存款:+"+all1;
String s5="取款:-"+all2;
String s6="汇款:-"+all3;
sb.append("---------------"+"\r\n"+"汇总:"+"\r\n");
sb.append(s4+"\r\n"+s5+"\r\n"+s6);
}
//将sb写到文件中
if(sb.length()!=0){
try {
bw=new BufferedWriter(new FileWriter(file));
bw.write(sb.toString());
bw.flush();
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return false;
}
}
AddFunction.java
/*
* 附加功能类
*/
package com.view; import java.io.FileWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import com.pojo.User_info;
import com.service.*;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer; public class AddFuction {
Scanner sc=new Scanner(System.in);
IUserService userSer=new UserService();
IOperateService operateSer=new OperateService();
ITypeService typeSer=new TypeService(); public int start(){
System.out.println("请选择功能:");
System.out.println("1.备份数据");
System.out.println("2.数据恢复");
int i=sc.nextInt();
return i;
} //1.备份数据
public boolean backup() throws Exception{
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<User_info> userlist=userSer.queryUserMessage();
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();//构建文档对象
Document d=db.newDocument();//创建新的document对象
Element e=d.createElement("users");//创建根节点
if(userlist!=null){
for(User_info user:userlist){
Element ee=d.createElement("user");//创建第一层子节点
ee.setAttribute("id", String.valueOf(user.getUser_id()));//设置属性 Comment ccc1=d.createComment("卡号");
Element eee1=d.createElement("cardnum");//创建第二层第一个子节点
eee1.setTextContent(user.getUser_cardnum());
Comment ccc2=d.createComment("姓名");
Element eee2=d.createElement("name");//创建第二层第二个子节点
eee2.setTextContent(user.getUser_name());
Comment ccc3=d.createComment("身份证");
Element eee3=d.createElement("idcard");//创建第二层第三个子节点
eee3.setTextContent(user.getUser_idcard());
Comment ccc4=d.createComment("密码");
Element eee4=d.createElement("password");//创建第二层第四个子节点
eee4.setTextContent(user.getUser_password());
Comment ccc5=d.createComment("开户时间");
Element eee5=d.createElement("opentime");//创建第二层第五个子节点
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
eee5.setTextContent(sdf.format(user.getUser_opentime()));
Comment ccc6=d.createComment("余额");
Element eee6=d.createElement("money");//创建第二层第六个子节点
eee6.setTextContent(String.valueOf(user.getUser_money()));
Comment ccc7=d.createComment("状态");
Element eee7=d.createElement("status");//创建第二层第七个子节点
String status="";
switch(user.getUser_status()){
case 0:
status="正常";
break;
case 1:
status="冻结";
break;
}
eee7.setTextContent(status); //第二层追加
ee.appendChild(ccc1);
ee.appendChild(eee1);
ee.appendChild(ccc2);
ee.appendChild(eee2);
ee.appendChild(ccc3);
ee.appendChild(eee3);
ee.appendChild(ccc4);
ee.appendChild(eee4);
ee.appendChild(ccc5);
ee.appendChild(eee5);
ee.appendChild(ccc6);
ee.appendChild(eee6);
ee.appendChild(ccc7);
ee.appendChild(eee7); //第一层追加
e.appendChild(ee);
}
d.appendChild(e);//将根节点追加到文档对象中
//将document写入文件中,将构建好的document输出到xml文档
OutputFormat of=new OutputFormat(d);
of.setEncoding("GBK");
Writer w=new FileWriter("src/com/view/ATM.xml");
XMLSerializer xs= new XMLSerializer(w,of);
xs.asDOMSerializer();//作为dom方式序列化文档
xs.serialize(d.getDocumentElement());//输出根元素
w.close();//关闭字符输出流
return true;
}
return false;
} //2.数据恢复
public boolean recover() throws Exception{
System.out.println("正在处理,请稍后。。。");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<User_info> userlist=new ArrayList();
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();//构建文档对象
Document d=db.parse("src/com/view/ATM.xml");//解析文档
Element e=d.getDocumentElement();//获取根节点
NodeList nl=e.getChildNodes();//获取根节点下所有子节点
for(int i=0;i<nl.getLength();i++){
if(nl.item(i).getNodeType()==1){
User_info user=new User_info();
Element ee=(Element)nl.item(i);//获得每一个子节点
String ees=ee.getAttribute("id");//获取每一个子节点的属性
user.setUser_id(Integer.valueOf(ees));//赋值
NodeList nlnl=ee.getChildNodes();//继续获得每一个子节点集
for(int j=0;j<nlnl.getLength();j++){
if(nlnl.item(j).getNodeType()==1){
Element eee=(Element)nlnl.item(j);//继续获得每一个子节点
String eeen=eee.getNodeName();//获取每一个子节点的元素名
String eeet=eee.getTextContent();//获取每一个子节点的text内容
//给user对象赋值
switch(eeen){
case "cardnum":
user.setUser_cardnum(eeet);
break;
case "name":
user.setUser_name(eeet);
break;
case "idcard":
user.setUser_idcard(eeet);
break;
case "password":
user.setUser_password(eeet);
break;
case "opentime":
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=sdf.parse(eeet);
user.setUser_opentime(date);
break;
case "money":
user.setUser_money(Double.valueOf(eeet));
break;
case "status":
if("正常".equals(eeet)){
user.setUser_status(0);
}else{
user.setUser_status(1);
}
break;
}
}
}
userlist.add(user);
}
}
//调用
if(userSer.resumeUserMessage(userlist)){
return true;
}
return false;
} }
对账单生成的e.txt文件
卡号:ICBC1513155154759
日期:2017-12-14------2017-12-14
操作时间 操作类型 操作金额
2017-12-14 17:03:52 存款 +60000
2017-12-14 17:04:00 取款 -999
2017-12-14 17:04:08 取款 -798
2017-12-14 17:04:16 取款 -134
2017-12-14 17:04:29 汇款 -1234
2017-12-14 17:04:35 存款 +200
2017-12-14 17:04:44 存款 +300
2017-12-14 17:04:51 取款 -880
2017-12-14 17:04:59 取款 -1000
2017-12-14 17:05:07 取款 -890
2017-12-14 17:05:15 取款 -1600
2017-12-14 17:05:22 取款 -890
2017-12-14 17:05:42 取款 -2500
---------------
汇总:
存款:+60500
取款:-9691
汇款:-1234
用户数据备份生成的xml文件:
<?xml version="1.0" encoding="GBK"?>
<users>
<user id="4">
<!--卡号-->
<cardnum>ICBC1513240108811</cardnum>
<!--姓名-->
<name>贾雨村</name>
<!--身份证-->
<idcard>777888200003039999</idcard>
<!--密码-->
<password>123456</password>
<!--开户时间-->
<opentime>2017-12-14 16:28:28</opentime>
<!--余额-->
<money>84000.0</money>
<!--状态-->
<status>正常</status>
</user>
<user id="1">
<!--卡号-->
<cardnum>ICBC1513134738163</cardnum>
<!--姓名-->
<name>萧十一郎</name>
<!--身份证-->
<idcard>459847199508248971</idcard>
<!--密码-->
<password>111111</password>
<!--开户时间-->
<opentime>2017-12-13 11:12:18</opentime>
<!--余额-->
<money>6566.0</money>
<!--状态-->
<status>正常</status>
</user>
<user id="2">
<!--卡号-->
<cardnum>ICBC1513154052221</cardnum>
<!--姓名-->
<name>卜世仁</name>
<!--身份证-->
<idcard>678498200511028764</idcard>
<!--密码-->
<password>111111</password>
<!--开户时间-->
<opentime>2017-12-13 16:34:12</opentime>
<!--余额-->
<money>993.0</money>
<!--状态-->
<status>正常</status>
</user>
<user id="3">
<!--卡号-->
<cardnum>ICBC1513155154759</cardnum>
<!--姓名-->
<name>e</name>
<!--身份证-->
<idcard>e</idcard>
<!--密码-->
<password>111111</password
><!--开户时间-->
<opentime>2017-12-13 16:52:34</opentime>
<!--余额-->
<money>49575.0</money>
<!--状态-->
<status>正常</status>
</user>
</users>
5、原生jdbc链接数据库实例-自动取款机的更多相关文章
- 4、原生jdbc链接数据库常用资源名
原生jdbc链接数据库要素:#MySql:String url="jdbc:mysql://localhost:3306/数据库名";String name="root& ...
- 3、原生jdbc链接数据库之锁与事务
一.锁的概念1.作用:是保证数据的一致性,只能一个人修改数据,不能同时多用户修改2.分类:行级锁和表级锁 乐观锁和悲观锁 二.事务1.为了保证数据的一致性和完整性,让数据库的多项操作合并为一个整体 ...
- jdbc链接数据库,获取表名,字段名和数据
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import ...
- JDBC操作数据库实例
jdbc操作数据库实例 1.jdbc创建数据库 1.1 前提条件 1.拥有创建和删除表的权限 2.数据库已经启动,且可用 1.2 jdbc创建数据库表的步骤: 导包:导入需要进行数据库编程的 JDBC ...
- Java基础之原生JDBC操作数据库
前言 日常开发中,我们都习惯了使用ORM框架来帮我们操作数据库,本文复习.记录Java如何使用原生JDBC操作数据库 代码编写 封装几个简单方法 find查询方法 findOne查询方法 update ...
- JDBC 操作数据库实例
JDBC是什么 JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是 ...
- 12C RAC中的一个数据库实例自动crash并报ORA-27157、ORA-27300等错误
rhel7.2上安装12C RAC数据库后,其中一个数据库实例经常会自动crash.查看alert日志发现以下错误信息: Errors in file /d12/app/oracle/diag/rdb ...
- jdbc链接数据库的url两种写法
首先看下面两个jdbc的url 一:jdbc.url=jdbc:oracle:thin:@100.2.194.200:1521/abc二:jdbc.url=jdbc:oracle:thin:@100. ...
- JDBC链接数据库步骤
java中定义链接数据库的标准:JDBC 1.导包:不同数据库有不同的jdbc驱动包,而且jdbc驱动包和数据库版本必须对应 2.测试 3.写代码 try { 1.//加载JDBC驱动 Clas ...
随机推荐
- 几点建议帮你写出简洁的JS代码
译者按: 规范的代码可以有效避免代码bug,fundebug才会报警少一点! 原文: Tips for Writing Cleaner Code 译者: Fundebug 为了保证可读性,本文采用意译 ...
- canvas-8searchLight3.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CSS3效果:波浪效果
实现效果 如图所示: 首先得准备三张图,一张是浅黄色的背景图loading_bg.png,一张是深红色的图loading.png,最后一张为bolang.png. css代码 body{backgro ...
- Ubuntu下解压缩文件
记录Ubuntu下各种压缩和解压方式: .tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)—————— ...
- LeetCode单排日记
初衷 之前有研究过一段时间数据结构与算法,但平时使用的不多,就连排序都很少用(自从JDK8有了Stream,就再也没有手写排序了.),所谓用进废退,时至今日,能记住的已经不多了,还记得之前有一次面试, ...
- php post接口,登录功能
登录功能同注册功能一样,都是使用 post 方法,在执行 sql 语句时,同样要使用 "select * from 表名 where 键名 = 参数" 的查询方式,不同的是: 注册 ...
- HTTP Authentication
PS:近期看了一本思维导图的书,实践一下.
- Centos7开启ssh免密码登录
1.输入命令:cd .ssh进入rsa公钥私钥目录(清空旧秘钥) 2.在当前目录下执行ssh-keygen -t rsa,三次回车后生成新的公钥(id_rsa.pub)私钥(id_rsa)文件(每个节 ...
- SQL SERVER 查询哪些存储使用了该表
SELECT obj.Name 存储过程名, sc.TEXT 存储过程内容 FROM syscomments sc INNER JOIN sysobjects obj ON sc.Id = obj.I ...
- c/c++柔性数组成员
柔性数组成员 定义和声明分离 #include <stdio.h> //只是告诉编译器,当编译到使用到这个函数的的代码时,虽然还没有找到函数定义的实体,但是也让它编译不出错误. exter ...