Oracle查询银行卡数、修改余额及验证登录
建立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查询银行卡数、修改余额及验证登录的更多相关文章
- redis修改密码以及验证登录,启动服务常用命令
1.通过配置文件,直接修改 2.启动然后使用密码验证登录 3.redis常用命令 启动服务:redis-server --service-start重启服务:service redis restart ...
- oracle查询哪些sp修改了某些表
select distinct s.owner ||'.'||s.name from dba_source swhere lower(s.TEXT) like '%insert%tb_flow_ins ...
- Oracle查询数据库中所有表的记录数
1.Oracle查询数据库中所有表的记录数,但是有可能不准建议用第二种方式进行查询 select t.table_name,t.num_rows from user_tables t 2.创建orac ...
- Oracle查询库中记录数大于2千万的所有表
Oracle查询库中记录数大于2千万的所有表 假如当前用户拥有select any table权限,则可以使用下列sql语句: select table_name, num_rows from dba ...
- 45 个非常有用的 Oracle 查询语句
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快 ...
- 40多个非常有用的Oracle 查询语句
给大家介绍是40多个非常有用的Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有Oracle 开发者都必备的技能,所以快快收藏吧! 日期 ...
- 45个非常有用的 Oracle 查询语句小结
45个非常有用的 Oracle 查询语句小结 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 ...
- 45 个非常有用的 Oracle 查询语句(转)
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...
- Oracle查询速度慢的原因总结
Oracle查询速度慢的原因总结 查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致 ...
随机推荐
- log4.net
1 简介 1.1Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统 ...
- (剑指Offer)面试题14:调整数组顺序使奇数位于偶数前面
题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 如果去掉约束条件: ...
- Netsh配置端口
开启防火墙端口 netsh firewall set portopening all 3389 RDP_Rule enable (TCP/UDP) #配置RPC高位端口段Netsh int ipv4 ...
- hotfix分析
使用System Update Readiness Tool for Windows Server 2008 R2 x64 可以分析hotfix是否有安装失败的情况 示例:http://blogs.t ...
- 4.3、Libgdx启动类和配置
(原文:http://www.libgdx.cn/topic/45/4-3-libgdx%E5%90%AF%E5%8A%A8%E7%B1%BB%E4%B8%8E%E9%85%8D%E7%BD%AE) ...
- centos 没有可用的网络设备
在重装的时候记得查看网络情况,提示没有可用的网络设备. 系统是64位的,我再创建虚拟机选择客户机操作系统的时候,选择成了 centos .不是centos 64位.改成centos 64位后,就显示了 ...
- ASP.NET Web Forms的改进
虽然ASP.NET Web Forms不是vNext计划的一部分,但它并没有被忽视.作为Visual Studio 2013 Update 2的一部分,它重新开始支持新工具.EF集成和Roslyn. ...
- hdu 5592 ZYB's Game 树状数组
ZYB's Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=55 ...
- Android (cocos2dx 网络访问)访问权限设置
Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码: 同样的如果用到其它的权限,也需要作出声明,部分权限列表如下: androi ...
- 疑难杂症:NoSuchMethodError: com.opensymphony.xwork2.util.finder.UrlSet.includeClassesUrl(Lcom/opensymphony/xwork2/util/finder/ClassLoaderInterface;)
严重: Exception starting filter struts2java.lang.NoSuchMethodError: com.opensymphony.xwork2.util.finde ...