建立Oracle表

create table T_BANKCARD
(
card_id VARCHAR2(20) not null,
user_id VARCHAR2(20) not null,
user_name VARCHAR2(20) not null,
password VARCHAR2(10) not null,
balance NUMBER(14,2) default 0,
state CHAR(1) default '1' not null,
create_time DATE,
column_8 CHAR(10)
)
-- Add comments to the table
comment on table T_BANKCARD
is '银行卡';
-- Add comments to the columns
comment on column T_BANKCARD.card_id
is '卡号';
comment on column T_BANKCARD.state
is '状态: 1 有效 2停用 3注销';
-- Create/Recreate primary, unique and foreign key constraints
alter table T_BANKCARD
add constraint PK_T_BANKCARD primary key (CARD_ID)

通过Java连接数据库实现

package com.hanqi.bank;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement; //封装银行卡表的数据库操作类
public class CardDAO { //添加卡
//返回卡号
public String addcard(String userid,String username,String password)
{
String rtn = null;
//生成卡号
String cardid = (int)(Math.random()*1000000)+"";//转换为字符串格式
try
{ //保存数据 //1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2获得连接
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl",
"test0816", "12345678"); //3创建声明 Statement st = conn.createStatement();
//4执行语句
String sql = "insert into T_BANKCARD(card_id,user_id,user_name,password,create_time)"
+"values('"+cardid+"','"+userid+"','"+cardid+"username','"+password+"',sysdate)";
if(st.executeUpdate(sql)==1)
{
rtn = cardid;
}
//5释放资源
st.close();
conn.close(); }
catch(Exception e)
{
e.printStackTrace(); } return rtn;
} //修改余额
//可以完成存款和取款的功能
//卡号 ; 最终余额
public boolean updateBalance(String cardid,double balance) throws Exception
{
boolean rtn = false;
//验证余额是否规范 if(balance<0)
{ throw new Exception("余额数据异常");
} try
{ //1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2获得连接
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl",
"test0816", "12345678"); //3创建声明
Statement st = conn.createStatement();
//4执行语句
String sql = "update t_bankcard set balance ="+balance+
"where card_id='"+cardid+"'"; rtn = st.executeUpdate(sql)==1; //5释放资源
st.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace(); }
return rtn;
} //验证登录 public boolean login(String cardid,String password)
{
boolean rtn = false; try
{
//1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2获得连接
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl",
"test0816", "12345678"); //3创建声明 Statement st = conn.createStatement();
//4执行语句 //这种方式会造成 SQL注入
String sql = "select * from t_bankcard where card_id ='"+cardid+"'and password='"+
password+"'and state='1'";
System.out.println(sql); //执行查询
ResultSet rs = st.executeQuery(sql);
//5 遍历结果集
rtn = rs.next(); //5释放资源
rs.close();
st.close();
conn.close(); }
catch(Exception e)
{
e.printStackTrace(); }
return rtn;
} public boolean login2(String cardid,String password)
{
boolean rtn = false; try
{
//1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2获得连接
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl",
"test0816", "12345678"); //3创建声明 //Statement st = conn.createStatement();
//带有?占位符的语句
String sql = "select * from t_bankcard where" + "card_id =?"
+"and password=?and state = '1'"; //预编译的声明
//优点 1 执行效率高 2避免SQL注入
PreparedStatement ps = conn.prepareStatement(sql); //替换占位符
ps.setString(1, cardid);
ps.setString(2, password); //4执行语句
ResultSet rs = ps.executeQuery();
//5 遍历结果集
rtn = rs.next(); //结果集的元数据 ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("getColumnCount="+rsmd.getColumnCount());
System.out.println("getColumnName="+rsmd.getColumnName(1)); //5释放资源
rs.close();
ps.close();
conn.close(); } catch(Exception e)
{
e.printStackTrace(); package com.hanqi.bank; import static org.junit.Assert.*; public class Test { @org.junit.Test
public void testInsert() {
//测试数卡
CardDAO cd = new CardDAO(); String cardid = cd.addcard("12345678901234", "张三", "12456");
if(cardid!=null)
{
System.out.println("发卡成功"+cardid);
}
else
{
System.out.println("发卡失败");
}
} @org.junit.Test
//测试修改余额
public void testEdit()
{
CardDAO cd = new CardDAO();
try {
if(cd.updateBalance("980159", 100))
{
System.out.println("余额修改成功");
}
else
{
System.out.println("余额修改不成功");
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} @org.junit.Test
public void testLogin()
{
CardDAO cd = new CardDAO();
if(cd.login("161314", "12456"))
{
System.out.println("登录成功");
}
else
{
System.out.println("卡号或密码错误 登录失败");
}
}
@org.junit.Test
public void testLogin2()
{
CardDAO cd = new CardDAO();
if(cd.login("161314", "12456"))
{
System.out.println("登录成功");
}
else
{
System.out.println("卡号或密码错误 登录失败");
}
}
} } return rtn;
} }

测试类

package com.hanqi.bank;

import static org.junit.Assert.*;

public class Test {

    @org.junit.Test
public void testInsert() {
//测试数卡
CardDAO cd = new CardDAO(); String cardid = cd.addcard("12345678901234", "张三", "12456");
if(cardid!=null)
{
System.out.println("发卡成功"+cardid);
}
else
{
System.out.println("发卡失败");
}
} @org.junit.Test
//测试修改余额
public void testEdit()
{
CardDAO cd = new CardDAO();
try {
if(cd.updateBalance("980159", 100))
{
System.out.println("余额修改成功");
}
else
{
System.out.println("余额修改不成功");
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} @org.junit.Test
public void testLogin()
{
CardDAO cd = new CardDAO();
if(cd.login("161314", "12456"))
{
System.out.println("登录成功");
}
else
{
System.out.println("卡号或密码错误 登录失败");
}
}
@org.junit.Test
public void testLogin2()
{
CardDAO cd = new CardDAO();
if(cd.login("161314", "12456"))
{
System.out.println("登录成功");
}
else
{
System.out.println("卡号或密码错误 登录失败");
}
}
}

Oracle查询银行卡数、修改余额及验证登录的更多相关文章

  1. redis修改密码以及验证登录,启动服务常用命令

    1.通过配置文件,直接修改 2.启动然后使用密码验证登录 3.redis常用命令 启动服务:redis-server --service-start重启服务:service redis restart ...

  2. oracle查询哪些sp修改了某些表

    select distinct s.owner ||'.'||s.name from dba_source swhere lower(s.TEXT) like '%insert%tb_flow_ins ...

  3. Oracle查询数据库中所有表的记录数

    1.Oracle查询数据库中所有表的记录数,但是有可能不准建议用第二种方式进行查询 select t.table_name,t.num_rows from user_tables t 2.创建orac ...

  4. Oracle查询库中记录数大于2千万的所有表

    Oracle查询库中记录数大于2千万的所有表 假如当前用户拥有select any table权限,则可以使用下列sql语句: select table_name, num_rows from dba ...

  5. 45 个非常有用的 Oracle 查询语句

    ​ 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快 ...

  6. 40多个非常有用的Oracle 查询语句

    给大家介绍是40多个非常有用的Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有Oracle 开发者都必备的技能,所以快快收藏吧! 日期 ...

  7. 45个非常有用的 Oracle 查询语句小结

    45个非常有用的 Oracle 查询语句小结 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 ...

  8. 45 个非常有用的 Oracle 查询语句(转)

    这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...

  9. Oracle查询速度慢的原因总结

    Oracle查询速度慢的原因总结 查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致 ...

随机推荐

  1. 关于C#中文本模板(.tt)的简单应用

    这两天做项目突遇 .tt文件,之前没有接触过,so查询学习做笔记,帮助记忆和后来者. 在项目添加中点击选择文本模板 下面贴出代码,做了简单的注释 <#@ template debug=" ...

  2. JS:中文GB2312编码

    今天开发遇到了个问题,有点纳闷.... 在ajax的时候要传递一个中文值,不管我在js中是否使用了encodeURI.encodeURIComponent编码,但是在后台request获取的值是始终是 ...

  3. 表单input按钮在各浏览器之间的兼容性

    从网上看了这篇关于表单input按钮的浏览器兼容性问题,总结的还不错,所以copy下来学习下. input按钮在各个浏览器之间的兼容性问题,看下边这段代码: input.item { backgrou ...

  4. sublime text 3 licence code

    Update:2016年3月9日09:14:12 可用 —– BEGIN LICENSE —–Michael BarnesSingle User LicenseEA7E-8213858A353C41 ...

  5. CorelDraw x6【Cdr x6】官方简体中文破解版(64位)安装图文教程、破解注册方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. Android多线程研究(1)——线程基础及源代码剖析

    从今天起我们来看一下Android中的多线程的知识,Android入门easy,可是要完毕一个完好的产品却不easy,让我们从线程開始一步步深入Android内部. 一.线程基础回想 package ...

  7. CentOS 6.5 源码安装MySQL5.6

    1:下载安装cmake (mysql5.5以后是通过cmake来编译的) #http://download.csdn.net/detail/csxuedn/7976005 #wget http://w ...

  8. 试读《基于MVC的JavaScript Web富应用开发》

    前两年做jsp开发时,用了不少JavaScript(JS)和Ajax, 最近的项目一直在使用Flex做前台,虽然也有类似的ActionScript实现JS的功能,但没想到的是,短短几年JS发展如此迅速 ...

  9. wordpress文章ID不连续显示问题的完美解决

    在最新版的 wordpress 系统中,依然存在着文章ID不连续显示的问题,也就是我们还没有上传多少文章,在数据库里的ID号已经很大了,也就是说如果我们的博客使用的是固定链接,那么在前台显示的ID相差 ...

  10. Linux网卡高级命令、IP别名及多网卡绑定 转

    http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/26/3100065.html 本篇随笔将详细讲解Linux系统的网卡高级命令.IP别名 ...