<三>JDBC_面向对象思想的体现
JDBCTools.java
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCTools {
/*
* 执行SQL的方法
* insert,update,delete
* */
public static void update(String sql){
Connection conn=null;
Statement st=null;
try {
/*
* 1、获取Connection连接
* 2、获取Statement
* 3、SQL语句
* 4、关闭数据库连接
*
* */
conn=getConnection();
st=conn.createStatement();
st.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
}finally{
release(st, conn);
}
}
public static Connection getConnection() throws Exception {
String driverClass = null;
String jdbcUrl = null;
String user = null;
String password = null;
// 读取类路径下的jdbc.properties文件
InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(in);
driverClass = properties.getProperty("driver");
jdbcUrl = properties.getProperty("jdbcUrl");
user = properties.getProperty("user");
password = properties.getProperty("password");
// 加载数据库驱动程序
Class.forName(driverClass);
// 通过DriverManager的getConnection()方法获取数据库连接
Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
return connection;
}
public static void release(Statement st, Connection conn) {
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void release(ResultSet rs,Statement st,Connection conn){
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st!=null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
测试类:TestJDBC.java
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import org.junit.Test;
public class TestJDBC {
@Test
public void testGetStudent(){
/*
* 1、得到查询的类型
* 2、具体查询学生信息
* 3、打印显示信息
* */
int searchType=getSearchTypeFromConsole();
Student student=searchStudent(searchType);
printStudent(student);
}
private void printStudent(Student student) {
if (student!=null) {
System.out.println(student);
}else{
System.out.println("查无此人!");
}
}
/*
* 具体查询显示信息,返回一个Student对象,若不存在返回null
* @param searchType:1 或2
* @return
* */
private Student searchStudent(int searchType) {
/*
* search=1: 提示输入身份证号
* search=2: 准考证号
* */
String sql="select flowid,type,idcard,examcard,studentname from "
+ "examstudent where ";
Scanner sc=new Scanner(System.in);
if (searchType==1) {
System.out.println("请输入身份证号:");
String examCard=sc.next();
sql=sql+"idcard='"+examCard+"'";
}else{
System.out.println("请输入准考证号:");
String examCard=sc.next();
sql=sql+"examCard='"+examCard+"'";
}
//执行查询
Student student=getStudent(sql);
return student;
}
private Student getStudent(String sql) {
Student stu=null;
Connection conn=null;
Statement st=null;
ResultSet rs=null;
try {
conn=JDBCTools.getConnection();
st=conn.createStatement();
rs=st.executeQuery(sql);
if (rs.next()) {
stu=new Student();
stu.setFlowID(rs.getInt(1));
stu.setType(rs.getInt(2));
stu.setIdCard(rs.getString(3));
stu.setExamCard(rs.getString(4));
stu.setStudentName(rs.getString(5));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCTools.release(rs, st, conn);
}
return stu;
}
private int getSearchTypeFromConsole() {
/*
* 1:用户身份证查询
* 2:用户准考证号查询
* */
System.out.println("请输入查询类型:1.用身份证查询;2.用准考号查询");
Scanner sc=new Scanner(System.in);
int type=sc.nextInt();
if (type!=1&&type!=2) {
System.out.println("输入有误,请重新输入!");
throw new RuntimeException();
}
return type;
}
public void addNewStudent(Student student){
/*
* 1、准备sql语句
* 2、调用JDBCTools类的update(sql)方法执行插入操作
* 问题:
* String类型的值
* */
String sql="insert into examstudent values ("
+ ""+student.getFlowID()+","
+student.getType()+",'"
+student.getIdCard()+"','"
+student.getExamCard()+"','"
+student.getStudentName()
+"')";
JDBCTools.update(sql);
}
@Test
public void testAddNewStudent(){
Student student=getStudentFromConsole();
addNewStudent(student);
}
/*
* 从控制台输入学生的信息
* */
private Student getStudentFromConsole() {
Scanner sc=new Scanner(System.in);
Student student=new Student();
System.out.print("FlowId:");
student.setFlowID(sc.nextInt());
System.out.print("Type:");
student.setType(sc.nextInt());
System.out.print("IdCard:");
student.setIdCard(sc.next());
System.out.print("ExamCard:");
student.setExamCard(sc.next());
System.out.print("StudentName:");
student.setStudentName(sc.next());
return student;
}
}
<三>JDBC_面向对象思想的体现的更多相关文章
- 第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现
一. 前奏-Timer类实现定时任务 在没有引入第三方开源的定时调度框架之前,我们处理一些简单的定时任务同时都是使用Timer类, DotNet中的Timer类有三个,分别位于不同的命名空间下,分别是 ...
- 【重走Android之路】【Java面向对象基础(三)】面向对象思想
[重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinkin ...
- linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现【转】
本文转自自:http://blog.chinaunix.net/uid-25014876-id-59418.html linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现 一. ...
- JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想
JAVA之旅(三)--数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好 ...
- linux设备驱动归纳总结(三):3面向对象思想和lseek、container_of、write、read 【转】
linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现 转自:http://blog.chinaunix.net/uid-25014876-id-59418.html 一.结构体 ...
- 【Linux开发】linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现
linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现 一.结构体struct file和struct inode 在之前写的函数,全部是定义了一些零散的全局变量.有没有办法整合 ...
- 进击的Python【第六章】:Python的高级应用(三)面向对象编程
Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...
- 20145208 实验三 Java面向对象程序设计
20145208 实验三 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- Java基础知识二次学习--第三章 面向对象
第三章 面向对象 时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...
随机推荐
- javascript数据结构与算法--基本排序算法分析
javascript中的基本排序算法 对计算机中存储的数据执行的两种最常见操作是排序和检索,排序和检索算法对于前端开发尤其重要,对此我会对这两种算法做深入的研究,而不会和书上一样只是会贴代码而已,下面 ...
- HDOJ 4652 Dice
期望DP +数学推导 Dice Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- extractor
package scrollable.excel.reader; import java.io.IOException; import java.io.InputStream; import java ...
- Python简单源码解析
主要为一些简单的源代码的解析以及一些方法的理解. 说明:这些文件都不是我写的,详情可参考Github上的内容. 批量修改文件类型 def batch_rename(work_dir, old_ext, ...
- PHP 动态生成验证码
……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为.这些机器人效率极高,完全不关心所攻击的表单的本来用途.它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为 ...
- 守护神 Supervisor
参考: http://linbo.github.io/2013/04/04/supervisor/ http://www.restran.net/2015/10/04/supervisord-tuto ...
- ASM:《X86汇编语言-从实模式到保护模式》第15章:任务切换
15章其实应该是和14章相辅相成的(感觉应该是作者觉得14章内容太多了然后切出来了一点).任务切换和14章的某些概念是分不开的. ★PART1:任务门与任务切换的方法 1. 任务管理程序 14章的时候 ...
- IIS跳转html页面自动识别是PC端还是手机端
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Caffe初试(三)使用caffe的cifar10网络模型训练自己的图片数据
由于我涉及一个车牌识别系统的项目,计划使用深度学习库caffe对车牌字符进行识别.刚开始接触caffe,打算先将示例中的每个网络模型都拿出来用用,当然这样暴力的使用是不会有好结果的- -||| ,所以 ...
- Jprofile监控本地tomact
第一步:安装Jprofile后,点击jprofiler.exe 第二步:配置要监控的tomact 1.点击startcenter 2.弹出对话框,点击new session下面的new server ...