建立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#判断一个类中有无"指定名称"的方法

    C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...

  2. mybatis 注解快速上手

    一.mybatis 简单注解 关键注解词 : @Insert : 插入sql , 和xml insert sql语法完全一样 @Select : 查询sql, 和xml select sql语法完全一 ...

  3. SharedObject.getLocal("application-name")

    package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.NetStatus ...

  4. 将博CMS安全分析报告-橘皮书

    一.使用IBM的AppScan和Acunetix应用程序漏洞扫描将博CMS5.5,得出一些漏洞.         此番扫描大小共23种类型问题,其中高危漏洞有三个,中危漏洞9个,低级漏洞11个.注意这 ...

  5. centos 没有可用的网络设备

    在重装的时候记得查看网络情况,提示没有可用的网络设备. 系统是64位的,我再创建虚拟机选择客户机操作系统的时候,选择成了 centos .不是centos 64位.改成centos 64位后,就显示了 ...

  6. UVA 10025 (13.08.06)

     The ? 1 ? 2 ? ... ? n = k problem  Theproblem Given the following formula, one can set operators '+ ...

  7. Kubuntu(14.04)共享wifi(热点)

    笔记本(kubuntu14.04)通过有线上网,共享本机无线给手机.平板及其他通过wifi上网的设备. 曾经在网上找过各种方法.下载了非常多软件都不能在本机上实现wifi共享,以下这样的方法眼下相对简 ...

  8. ListView的自动循环滚动显示

    最近项目里需要做评价内容的循环滚动显示,一开始想到的就是定时器.后来查了资料才知道ListView里面有个函数smoothScrollToPosition(position),瞬间觉得简单了很多.首先 ...

  9. 抛砖引玉:关于Android的ListView中CheckBox错乱

    首先:参考了这篇翻译的文章:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html 文章中关于说的Android中的Recyc ...

  10. 你可能不知道的SQL问题

    1.  如下是sql语句和结果, SELECT count(*) AS total FROM orders; +-------+ | total | +-------+ | 150 | +------ ...