JDBC核心API
JDBC中的核心类有:DriverManager、Connection、Statement,和ResultSet!- DriverManger(驱动管理器)的作用有两个:
1. 注册驱动:这可以让JDBC知道要使用的是哪个驱动;
2. 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
- Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:
> Connection最为重要的一个方法就是用来获取Statement对象;
- Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句:
1. void executeUpdate(String sql):执行更新操作(insert、update、delete等);
2. ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;
- ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:
1. boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;
2. XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。
JDBC的入门程序
使用jdbc的步骤:
1. 导jar包:驱动!
2. 加载驱动类:Class.forName(“类名”);
3. 使用DriverManager类来得到Connection对象!
4. 编写sql指令(insert,delete,update,select)
5. 使用Connection得到Statement对象
6. 使用Statement对象对数据库进行增删改查操作
7. 分析执行的结果,增删改就获取受影响的行数,如果是查询就获取查询结果集
8. 关闭资源
一、嗖嗖大厅的主要页面
private void showFirstMenu() throws StatusDisbleException, SQLException, CardOrPasswordNotExitExcepion { System.out.println("*********欢迎使用嗖嗖移动业务大厅*************"); System.out.println("1.用户登录\t2.用户注册\t3.使用嗖嗖\t4.话费充值\t5.资费说明\t6.退出系统"); System.out.print("请选择:"); int choose = this.scanner.nextInt(); switch(choose) { case 1: this.doLogin(); break; case 2: this.doRegister(); break; case 3: this.useSoSo(); break; case 4: this.topUp(); break; case 5: this.cosInfo(); break; case 6: this.exitSystem(); break; default: System.out.println("输入有误!请重新输入!"); this.showSecondMenu(); } }
二、用户登录页面
private void doLogin() throws StatusDisbleException, SQLException, CardOrPasswordNotExitExcepion { System.out.println("************可选择的卡号*******************"); MoboleCardDao moboleCardDao = new MobolCardDaoImpl(); MoboleCard moboleCard = new MoboleCard(); System.out.println(moboleCard.getPassword()); System.out.print("请输入卡号:"); String cardNumber = this.scanner.next(); System.out.print("请输入密码:"); String password = this.scanner.next(); try { this.currentLoginCard = moboleCardDao.login(cardNumber, password); this.showSecondMenu(); } catch (StatusDisbleException | SQLException | CardOrPasswordNotExitExcepion var6) { System.out.println("【友情提示】" + var6.getMessage()); this.showFirstMenu(); } }
三、用户注册页面
private void doRegister() throws StatusDisbleException, SQLException, CardOrPasswordNotExitExcepion { CardDao cardDao = new CardDaoImpl(); List<Card> cards = cardDao.queryAll(); System.out.println("********可选的卡号**********"); int cardIndex; for(cardIndex = 0; cardIndex < cards.size(); ++cardIndex) { System.out.println(cardIndex + 1 + "." + ((Card)cards.get(cardIndex)).getCardNumber() + "\t"); if ((cardIndex + 1) % 3 == 0) { System.out.println(); } } System.out.println("\n请选择卡号(输入序号):"); cardIndex = this.scanner.nextInt(); String cardNumber = ((Card)cards.get(cardIndex - 1)).getCardNumber(); SerpackageTypeDao serpackageTypeDao = new SerpackageTypeDaoImpl(); List<SerpackageType> serpackageTypes = serpackageTypeDao.queryAll(); int typeIdsex; for(typeIdsex = 0; typeIdsex < serpackageTypes.size(); ++typeIdsex) { System.out.println(typeIdsex + 1 + "." + ((SerpackageType)serpackageTypes.get(typeIdsex)).getName() + "\t"); } System.out.println("请选择套餐(输入序号):"); typeIdsex = this.scanner.nextInt(); System.out.println("请输入你的姓名:"); String name = this.scanner.next(); System.out.println("请输入密码:"); String password = this.scanner.next(); System.out.println("请输入预存话费金额:"); double money = this.scanner.nextDouble(); SerpackageDao serpackageDao = new SerpackageDaoImpl(); Integer type = ((SerpackageType)serpackageTypes.get(typeIdsex - 1)).getId(); Serpackage serpackage = serpackageDao.queryByType(type); while(true) { double cost = money - serpackage.getPrice(); if (cost >= 0.0D) { MoboleCardDao moboleCardDao = new MobolCardDaoImpl(); MoboleCard moboleCard = new MoboleCard(); moboleCard.setCardNumber(cardNumber); moboleCard.setUsername(name); moboleCard.setPassword(password); moboleCard.setSerPackage(type); moboleCard.setMoney(cost); moboleCardDao.insert(moboleCard); RechargeRecordDao rechargeRecordDao = new RechargeRecordDaoImpl(); RechargeRecord rechargeRecord = new RechargeRecord(); rechargeRecord.setCardNumber(cardNumber); rechargeRecord.setAmount(money); rechargeRecord.setRechargeDate(new Date()); rechargeRecordDao.insert(rechargeRecord); Card card = (Card)cards.get(cardIndex - 1); card.setStatus(1); cardDao.update(card); System.out.println("注册成功!卡号:" + cardNumber + ",用户名:" + name + "当前余额:" + cost); System.out.println(((SerpackageType)serpackageTypes.get(typeIdsex - 1)).getName() + ":通话时长:" + serpackage.getTalkTime() + "分钟/月,短信条数为" + serpackage.getSmsCount() + "分钟/月上网流量:" + serpackage.getFlow() + "GB/月。"); this.showFirstMenu(); return; } System.out.println("您预存的话费不足以支付本月套餐资费,请重新充值:"); money = this.scanner.nextDouble(); } }