<三>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 内容:面向对象设计思 ...
随机推荐
- FMDB线程安全
//打开数据库 如果没有就创建 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUse ...
- LOL 控制技能的解释
压制:硬控的一种,是指A在释放压制型技能的时候B无法进行任何动作,可以被 水银腰带 和 坩埚盖 解除(原来可以完全解掉,现在貌似只是能动,伤害还在继续,比如蚱蜢的R中,用水银解掉之后可以立即跑开,但是 ...
- 如何删除PHP数组中的元素,并且索引重排(unset,array_splice)?
如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); pri ...
- .htaccess 基础教程(一)
.htaccess是什么? .htaccess叫分布式配置文件,它提供了针对目录改变配置的方法——在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.并且子目录中的 ...
- thinkphp表单自动验证
ThinkPHP框架表单验证 对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验 ...
- chrome地址栏搜索直接跳转百度首页?
https://www.baidu.com/s?ie={inputEncoding}&wd=%s
- 网址前面的icon
shortcut icon和icon代码之间究竟有何区别呢.下面介绍一下 语句一:<link rel="shortcut icon" href="favicon ...
- 分布式中Redis实现Session终结篇
上一篇使用Redis实现Session共享方式虽然可行,但是实际操作起来却很麻烦,现有代码已经是这个样子了,总不可能全部换掉吧!好吧,这是个很实际的问题,那么能不能实现无侵入式的分布式Session共 ...
- 难道这就是JavaScript中的"闭包"
其实对于JavaScript中的"闭包"还没真正理解,这次在实际Coding中似乎遇到了"闭包"的问题,仅此摘录,以待深究. 表现为jQuery的post方法回 ...
- grep 正则表达式
本文转自:http://www.jb51.net/article/31207.htm 正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.aw ...