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,没有创建计算列导致 ...
随机推荐
- libcurl API:CURLOPT_REFERER的用法
1.当你用libcurlAPI来请求某些数据时,发现返回的数据是0,这时候你就要去尝试用CURLOPT_REFERER来伪造一个来路页面:具体设置什么值可以通过浏览器来获取:按f12,在network ...
- 常见错误:Apple Mach-O Linker Error
常见错误描述: Apple Mach-O Linker Error这类错误的错误信息最后一行通常如下: Command /Developer/Platforms/iPhoneOS.platform/D ...
- CarDAQ-Plus
Overview CarDAQ-Plus is the most validated and accepted J2534 device in the world. It has been on th ...
- TCP连接(Time_Wait、Close_Wait)说明
修改Time_Wait和CLOSE_WAIT时间 修改Time_Wait参数的方法 (在服务端修改)Windows下在HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlS ...
- 计算Excel中的Sheet个数
$strpath="d:\ee.xlsx"$excel=new-object -comobject excel.application$WorkBook = $excel.Work ...
- Unity实现相似于安卓原生项目的点击安卓返回button回到前一页的功能
本章博主和大家一起讨论下Unity怎么实现类似安卓原生项目,点击安卓返回button实现返回到前一个页面的功能. 1.定义一个泛型用于响应安卓的返回button public static List& ...
- hdu 3681 Prison Break (TSP问题)
Prison Break Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- go exec: "gcc": executable file not found in %PATH%
win下使用go,在进行go run build.go时,提示 exec: "gcc": executable file not found in %PATH% 原因是sqlitl ...
- Struts2中属性驱动与模型驱动
属性驱动: 1.概念 能够利用属性驱动获取页面表单元素的内容 2.步骤 1.在action中声明属性,属性的名称和页面元素中name属性的值保持一致 2.action中的属性必须有set和get方法 ...
- Php-SPL库中的迭代器类详解(转)
SPL提供了多个迭代器类,分别提供了迭代访问.过滤数据.缓存结果.控制分页等功能.,因为php总是在不断壮大,我尽可能列出SPL中所有的迭代类.下面其中一些迭代器类是需要php5.4,另外一些如Sea ...