建立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:常量、变量 、 表达式 、运算符、 枚举

    常量 变量 表达式 运算符 枚举 1.布尔类型只有真和假 2运算符 >,<,<=,>=,==,!=.判断两个数是否相等要使用双等号‘==’.逻辑运算符的表达式结果非真即假,&a ...

  2. 小知识~让你的DLL类库带上注释

    在我们进行开发公用组件时,一般会把DLL给团队的开发人员直接使用,而不会把项目给他们,因为那样对为框架级代码是不安全的,这时引用框架类库有两种方式,一种是直接复制DLL,第一种是使用包管理工具Nuge ...

  3. iOS开发-核心动画随笔

    核心动画可以让View旋转,缩放,平移(主要是操作View的layer(层)属性)但是核心动画改变的位置不是真实的位置,一切都是假象所以有时候要用到其他动画,如UIView本来封装的动画,还有定时器 ...

  4. 3DTouch-ShortcutItem - iOS9 - xcode7

    据说苹果某个神秘的团队闭门潜心研发多年的3DTouch终于,应用在iOS9上,且公开了API. 在系统主界面用力按压 APP 图标,如上会出现自定义菜单 有两种方法可以实现一.代码(这种方法也是可以动 ...

  5. SQL扫描并执行文件夹里的sql脚本

    场景:项目数据库操作全部使用存储过程实现.每天都会有很多存储过程更新/增加,人工对测试环境中存储过程更新,会有一定概率出现遗漏,也麻烦!所以,需要一个工具将文件夹中所有存         储过程执行一 ...

  6. 【转】知道创宇研发技能表v2.1

    转自:http://blog.knownsec.com/Knownsec_RD_Checklist/v2.1.html# 知道创宇研发技能表v2.1 创建时间:2012/12/1 2013/4/26 ...

  7. bzoj 2435: [Noi2011]道路修建 树上 dp

    2435: [Noi2011]道路修建 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  8. hihocoder #1177 : 顺子 模拟

    #1177 : 顺子 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/1177 ...

  9. 设备\Device\Harddisk1\DR1 有一个不对的区块

    近期遇到一个windows上的Oracle DB system表空间有问题.然后第一个反应就是查看windows的日志查看器,确实发现了报错: 设备\Device\Harddisk1\DR1 有一个不 ...

  10. SQL Server数据库大型应用解决方案总结

    随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题. 一 ...