JDBC:以面向对象的思想编写JDBC程序

题目简述:

数据表中添加学生信息,并且可以通过身份证号准考证来查询学生信息。

Name        Type         Nullable Default Comments

----------- ------------ -------- ------- --------

IDCARD      NUMBER(10)   Y

EXAMCARD    NUMBER(10)   Y

STUDENTNAME VARCHAR2(20) Y

LACATION    VARCHAR2(20) Y

GRADE       NUMBER(3)    Y

测试类

package xuezaipiao3;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import xuezaipiao1.JDBC_Tools;

/**
 * 思考:
 * 向数据表中添加一条学生信息记录,那么学生信息就可以创建一个学生类来储存信息
 * 步骤:
 * 	1) Student成员变量 对应studnt数据表
 * 	2) 创建一个方法addStudent(Student student)
 *  3) 方法中执行相应的 SQL 操作
 * @author Kevy
 *
 */
public class thinkInJDBC {

	public static void main(String[] args) {
		Student s = getStudentFromConsole();
		addStudent(s);
		QueryStudent();
	}
	public static void QueryStudent(){

		int searchType = getSearchTypeFromConsole();
		Student student = searchStudent(searchType);
		printStudent(student);
	}

	/**
	 * 打印学生信息
	 * @param student
	 */
	private static void printStudent(Student student) {
		if(student!=null){
			System.out.println(student);
		}else{
			System.out.println("查无此人!");
		}
	}
	/**
	 *
	 * @param searchType 1 And 2
	 * @return
	 */
	private static Student searchStudent(int searchType) {

		String sql = "SELECT * FROM student "
				+ "where ";
		Scanner scanner = new Scanner(System.in);
		if(searchType==1){
			System.out.print("请输入身份证:");
			int id = scanner.nextInt();
			sql = sql + "IDCARD = " +id;
		}else{
			System.out.print("请输入准考证:");
			int id = scanner.nextInt();
			sql = sql + "EXAMCARD = " +id;
		}

		Student student = getStudent(sql);
		scanner.close();
		return student;
	}

	/**
	 * 根据传入的sql返回Student对象
	 * @param sql
	 * @return
	 */
	private static Student getStudent(String sql) {

		Connection connection = null;
		Statement statement = null;
		ResultSet rs = null;
		Student stu = null;
		try {
			connection = JDBC_Tools.getConnection();
			statement = connection.createStatement();
			rs = statement.executeQuery(sql);
			if(rs.next()){
				stu = new Student(rs.getInt("IDCARD"),
						rs.getInt("EXAMCARD"),rs.getString("STUDENTNAME"),
						rs.getString("LACATION"),rs.getInt("GRADE"));
			}
		} catch (Exception e) {

			e.printStackTrace();
		}finally{
			JDBC_Tools.relaseSource(rs, connection, statement);
		}

		return stu;
	}
	/**
	 *
	 * @return 1 用身份证查询 , 2 用准考证号查询  其他无效
	 */
	@SuppressWarnings("resource")
	private static int getSearchTypeFromConsole() {

		System.out.println("请输入查询类型:1.身份证查询   2.准考证查询");
		System.out.print("你的选择:");
		Scanner scanner = new Scanner(System.in);

		int type = scanner.nextInt();

		if(type!=1 && type!=2){
			System.out.println("输入有误,请重新输入");
			throw new RuntimeException();
		}
		scanner.close();
		return 0;
	}

	/**
	 * 从控制台获取信息 并创建学生对象
	 * @return
	 */
	private static Student getStudentFromConsole() {

		Scanner scanner = new Scanner(System.in);
		Student student = new Student();

		System.out.print("IDCard:");
		student.setIDCard(scanner.nextInt());

		System.out.print("ExamID:");
		student.setExamID(scanner.nextInt());

		System.out.print("StudentName:");
		student.setStudentName(scanner.next());

		System.out.print("Llocation:");
		student.setLacation(scanner.next());

		System.out.print("Grade:");
		student.setGrade(scanner.nextInt());
		scanner.close();
		return student;

	}

	/**
	 * 添加学生信息
	 * @param student
	 */
	public static void addStudent(Student student){
		String sql = "INSERT INTO STUDENT "
				+ "VALUES("+student.getIDCard()
				+","+student.getExamID()
				+",'"+student.getStudentName()
				+"','"+student.getLacation()
				+"',"+student.getGrade()
				+")";
		JDBC_Tools.update(sql);
	}
}

Student类

public class Student {
	private int IDCard;
	private int ExamID;
	private String StudentName;
	private String Lacation;
	private int Grade;

	public Student(int iDCard, int examID, String studentName, String lacation,
			int grade) {
		super();
		IDCard = iDCard;
		ExamID = examID;
		StudentName = studentName;
		Lacation = lacation;
		Grade = grade;
	}

	@Override
	public String toString() {
		return "Student [IDCard=" + IDCard + ", ExamID=" + ExamID
				+ ", StudentName=" + StudentName + ", Lacation=" + Lacation
				+ ", Grade=" + Grade + "]";
	}

	public Student() {
		super();
	}

	public int getIDCard() {
		return IDCard;
	}
	public void setIDCard(int iDCard) {
		IDCard = iDCard;
	}
	public int getExamID() {
		return ExamID;
	}
	public void setExamID(int examID) {
		ExamID = examID;
	}
	public String getStudentName() {
		return StudentName;
	}
	public void setStudentName(String studentName) {
		StudentName = studentName;
	}
	public String getLacation() {
		return Lacation;
	}
	public void setLacation(String lacation) {
		Lacation = lacation;
	}
	public double getGrade() {
		return Grade;
	}
	public void setGrade(int grade) {
		Grade = grade;
	}

}

JDBC工具类

package xuezaipiao1;
/**
 * JDBC工具类
 * 封装一些简单的JDBC操作方法
 * version 1
 */
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
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 JDBC_Tools {
	/**
	 * 用来执行 SQL 的方法,包括INSRT , UPDATE , DELETE,不包含SELECT
	 * 参数 String SQL语句
	 * @return int 执行了几条记录
	 */
	public static int update(String sql){
			Connection conn = null;
			Statement statement = null;
			int num = 0;
			try {
				try {
					conn = JDBC_Tools.getConnection();
				} catch (Exception e) {
					e.printStackTrace();
				}
				statement = conn.createStatement();

				num = statement.executeUpdate(sql);
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				JDBC_Tools.relaseSource(conn, statement);
			}
		return num;
	}

	/**
	 * 用来执行 SQL 的SELECT 方法
	 */
	public static void query(String sql){
		Connection conn = null;
		Statement statement = null;
		ResultSet rs = null;
		try {
			conn = JDBC_Tools.getConnection();
			statement = conn.createStatement();
			rs = statement.executeQuery(sql);
			while(rs.next()){
				System.out.println(rs.getInt("id"));
				System.out.println(rs.getString(2));
				System.out.println(rs.getString("email"));
			}
		} catch (Exception e) {

			e.printStackTrace();
		}finally{
			JDBC_Tools.relaseSource(rs, conn, statement);
		}
	}

	/**
	 * 用来释放资源,参数是 Connection 、 Statement
	 * @param conn
	 * @param statement
	 */
	public static void relaseSource(ResultSet rs,Connection conn ,Statement statement){
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		JDBC_Tools.relaseSource(conn, statement);
	}
	public static void relaseSource(Connection conn ,Statement statement){
		if(statement!=null){
			try {
				statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		//使用两个 if ,这样即使中间出现异常,程序还是继续执行下去
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 *
	 * @return
	 * @throws Exception
	 */
	public static Connection getConnection() throws Exception {
		Properties properties = new Properties();
		try {
//			InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties");
//			properties.load(in);
			properties.load(new FileInputStream(
					"D://LearnJava//learnJDBC//Lesson2_UseStatementAndResultSet//src//jdbc.properties"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		String user = properties.getProperty("user");
		String password = properties.getProperty("password");
		String jdbcUrl = properties.getProperty("jdbcUrl");
		String dirverName = properties.getProperty("driver");
		try {
			Class.forName(dirverName);
		} catch (ClassNotFoundException e1) {

			e1.printStackTrace();
		}
		Connection connection = null;
		try {
			connection = DriverManager.getConnection(jdbcUrl, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}
}

时间: 2024-10-27 07:54:51

JDBC:以面向对象的思想编写JDBC程序的相关文章

python基础----以面向对象的思想编写游戏技能系统

1. 许多程序员对面向对象的思想都很了解,并且也能说得头头是道,但是在工作运用中却用的并不顺手. 当然,我也是其中之一. 不过最近我听了我们老师的讲课,对于面向对象的思想有了更深的理解,今天决定用一个实例跟大家分享一下. 欢迎各位前辈评论指正. 2.面向对象的三大特征:封装.继承.多态          六大原则: 开闭原则,单一职责,依赖倒置,组合复用,里氏替换,迪米特法则 3. 可是这三大特征和六大原则具体如何运用,又从哪里才能体现出我应用到了呢? 下面我就以一个游戏技能项目的代码实例,来讨

以面向对象的思想实现数据表的添加和查询,JDBC代码超详细

以面向对象的思想编写JDBC程序,实现使用java程序向数据表中添加学生信息,并且可以实现给定×××号查询学生信息或给定准考证号查询学生信息. 创建的数据表如下: CREATE TABLE EXAMSTUDENT(FlowID INTEGER,Type INTEGER,IDCard VARCHAR(18),ExamCard VARCHAR(15),StudentName VARCHAR(20),Location VARCHAR(20),Grade INTEGER);1.首先实现通过java程序在

Java - 面向对象思想进行JDBC编程

mysql-connector-java-5.1.7-bin.jar jdbc.properties driver=com.mysql.jdbc.Driver jdbcUrl=jdbc\:mysql\://localhost\:3306/lesson user=root password= JDBCTools.java package 面向对象思想进行JDBC编程; import java.io.IOException; import java.io.InputStream; import ja

jQuery用面向对象的思想来编写验证表单的插件

本人的重点是怎么构建一个简单有效可扩展的jQuery表单验证插件,这篇文章没有教你怎么用 validate plugin.我们的重点在学习一些jQuery,Javascript面向对象编程的知识. 下面是一个完整的html页面代码,可以直接运行测试的. <html> <head><title>jQuery用面向对象的思想来编写验证表单的插件</title> <style type="text/css"> form {margi

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

面向对象编程思想(OOP)

本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞大 很多软件进入维护阶段 需求的不断变更 软件开发中存在很多其他的问题,上面只是从程序开发和设计的角度看到的部分问题.需求解决上面软件开发中的问题,就要求我们编写(设计)的软件具有很好的可读性.可维护性和可扩展性.我们需要保证代码具有高内聚低耦合. 下面将简单介绍面向对象的一些基本特性.设计原则,以

DOTA与面向对象编程思想(1)——分述DOTA和面向对象思想

首先,必须声明这篇文章是一个业余程序员的业余之作.作为一个刚刚学习了一个月JAVA一个月Android,计算机C语言二级水平的人,大谈面向对象必然会漏洞百出,所以希望各位读者以科学的眼光去评价而不以科学的眼光去批评. 关于DOTA: DOTA是魔兽争霸的一款自定义地图,可支持5V5对战游戏,我是从2012年4月份开始玩的这个游戏,很晚辈.很晚辈了,到现在已经有3年有余了.这么写,好像我一直以这个游戏为职业呢,当然不会,嘿嘿,我只是一个学生,没事就才和同学们开开黑的.这个游戏特别好玩,至少是我玩过

揭开JDBC的神秘面纱,让JDBC不再神秘

1.JDBC是什么? JDBC(Java DataBase Connectivity)java数据库连接 2.JDBC可以做什么?        简单地说,JDBC 可做三件事:与数据库建立连接.发送 操作数据库的语句并处理结果. 3.JDBC的优势? Java 具有坚固.安全.易于使用.易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言.所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法. 4.JDBC的实现? JDBC定义接口    数据库厂商实现接口    程

python 面向对象设计思想发展史

这篇主要说的是程序设计思想发展历史,分为概述和详细发展历史 一,概述 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的 指令和数 据.简单来说,就是直接编写 0 和 1 的序列来代表程序语言.例如:使用 0000 代表 加载(LOAD),0001 代表 存储(STORE)等. 机器语言由机器直接执行,速度快,但一个很明显的缺点就是:写起来实在是太困难了,一旦你 发现自己 写错了,改起来更蛋疼!这样直接导致程序编写效率十分低下,编写程序花