通过JDBC连接数据库再向数据库里录入数据

18 篇文章 0 订阅

一  首先第一步我们现在数据库里创建一张examstudent空表:

二 接着对应着表里内容创建一个学生类:

package com.atguigu.jdbc;

public class Student {
	// 流水号
	private int flowId;
	// 考试类型
	private int type;
	// 身份证号
	private String idCard;
	// 准考证号
	private String examCard;
	// 学生名
	private String studentName;
	// 学生地址
	private String location;
	// 考试分数
	private int grade;

	public int getFlowId() {
		return flowId;
	}

	public void setFlowId(int flowId) {
		this.flowId = flowId;
	}

	public int getType() {
		return type;
	}

	public void setType(int type) {
		this.type = type;
	}

	public String getIdCard() {
		return idCard;
	}

	public void setIdCard(String idCard) {
		this.idCard = idCard;
	}

	public String getExamCard() {
		return examCard;
	}

	public void setExamCard(String examCard) {
		this.examCard = examCard;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public int getGrade() {
		return grade;
	}

	public void setGrade(int grade) {
		this.grade = grade;
	}

	public Student(int flowId, int type, String idCard, String examCard, String studentName, String location,
			int grade) {
		super();
		this.flowId = flowId;
		this.type = type;
		this.idCard = idCard;
		this.examCard = examCard;
		this.studentName = studentName;
		this.location = location;
		this.grade = grade;
	}

	@Override
	public String toString() {
		return "Student [flowId=" + flowId + ", type=" + type + ", idCard=" + idCard + ", examCard=" + examCard
				+ ", studentName=" + studentName + ", location=" + location + ", grade=" + grade + "]";
	}

}

 三 然后就是书写一个JDBCTools工具类,用于数据库的增删改操作:

package com.atguigu.jdbc;

import java.beans.Statement;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.mysql.jdbc.Connection;

/**
 * 手写操作JDBC的工具类,封装了一些工具方法 Version 1
 */
public class JDBCTools {

	/**
	 * 1. 获取连接的方法 通过读取配置文件从数据库服务器获取一个连接
	 * 
	 * @return
	 * @throws Exception
	 */
	public static Connection getConnection() throws IOException, ClassNotFoundException, SQLException {
		// 1.准备连接数据库的4个字符串
		// 1).创建Properties对象
		Properties properties = new Properties();

		// 2).获取jdbc.properties对应的输入流
		InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");

		// 3).加载2)对应的输入流
		properties.load(in);

		// 4)具体决定user,password等4个字符串
		String user = properties.getProperty("user");
		String password = properties.getProperty("password");
		String jdbcUrl = properties.getProperty("jdbcUrl");
		String driver = properties.getProperty("driver");

		// 2.加载数据库驱动程序(对应Driver 实现类中有注册驱动的静态代码块)
		Class.forName(driver);

		// 3.通过DriverManager的getConnection()方法获取数据库连接
		return (Connection) DriverManager.getConnection(jdbcUrl, user, password);
	}

	/**
	 * 关闭ResultSet、Statement、Connectionh 关闭原则:和栈类似,先开启的后关闭,后开启的先关闭.
	 * 
	 * @param statement
	 * @param conn
	 */
	public static void release(ResultSet rs, java.sql.Statement statement, Connection conn) {
		// 关闭ResultSet对象
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		// 关闭Statement对象
		if (statement != null) {
			try {
				statement.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		// 关闭conn对象
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 执行SQL的方法
	 * 
	 * @param sql:insert
	 *            update或delete,而不包含select
	 */
	public static void update(String sql) {

		// 1. 获取数据库连接
		Connection conn = null;
		java.sql.Statement statement = null;
		ResultSet rs = null;

		try {
			conn = JDBCTools.getConnection();

			// 2. 准备插入的SQL语句语句
			// a. 插入
			// sql = "INSERT INTO customers(ID, NAME, EMAIL, BIRTH) "
			// + "VALUES ('2018','王小二', '163@erpang.com', '1999-04-24')";
			// b. 删除
			// sql = "DELETE FROM customers WhERE ID = '2018'";
			// c. 更新
			// sql = "UPDATE customers SET EMAIL = '163@二胖.com' WHERE ID = '2017'";
			System.out.println(sql);

			// 3. 执行插入
			// 1)获取操作SQL语句的Statement对象:调用Connection的createStatement()方法来获取
			statement = conn.createStatement();

			// 2)调用Statement对象的executeUpdate(sql)执行SQL语句进行插入
			statement.executeUpdate(sql);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭连接
			JDBCTools.release(rs, statement, conn);
		}

	}
}

四 最后就是写向数据库里录入学生信息操作:

package com.atguigu.jdbc;

import java.util.Scanner;

import org.junit.Test;

public class JDBCStudent {
	/**
	 * 向数据库里录入学生信息测试
	 */
	@Test
	public void testAddNewStudent() { 
		Student student = getStudentFromConsole();
		addNewStudent(student);
	}
	/**
	 * 从控制台输入学生的信息
	 * @return
	 */
	private Student getStudentFromConsole() {
		Scanner scanner = new Scanner(System.in);
		
		Student student = new Student(0, 0, null, null, null, null, 0);
		System.out.print("FlowId: ");
		student.setFlowId(scanner.nextInt());
		
		System.out.print("Type: ");
		student.setType(scanner.nextInt());
		
		System.out.print("IdCard: ");
		student.setIdCard(scanner.next());
		
		System.err.print("ExamCard: ");
		student.setExamCard(scanner.next());
		
		System.out.print("StudentName: ");
		student.setStudentName(scanner.next());
		
		System.out.print("Location: ");
		student.setLocation(scanner.next());
		
		System.out.print("Grade: ");
		student.setGrade(scanner.nextInt());
		return student;
	}

	public void addNewStudent(Student student) {
		//1. 准备一条sql语句:
		String sql = "INSERT INTO examstudent "
				+ "VALUES(" + student.getFlowId() 
				+ "," + student.getType()
				+ ",'" + student.getIdCard()
				+ "','" + student.getExamCard()
				+ "','" + student.getStudentName()
				+ "','" + student.getLocation()
				+ "'," + student.getGrade() + ")";
	}
}

五 启用sql的update操作:

	//2. 调用JDBCTools类的update(sql)方法执行插入操作
		JDBCTools.update(sql);

六 从控制台输入信息后,我们来看数据库里是否成功录入信息:

很不错,我门成功了!

七 下面我们将通过表中的一些关键字查找某条学生的所有信息:
1 首先准备下面的几个函数:

public void testGetStudent() {
		//1. 得到查询的类型
		int searchType = getSearchTypeFromConsole();
		
		//2. 具体查询学生信息
		Student student = searchStudent(searchType);
		
		//3. 打印学生信息
		printStudent(student);
	}

2. 接着从控制台读入一个整数,确定要查询的类型,有两种查询方法:一种是通过身份证,另一种就是通过准考证

/**
	 * 从控制台读入一个整数,确定要查询的类型
	 * @return 1. 用身份证查询, 2. 用准考证查询,其他无效,并提示请用户重新输入
	 */
	private int getSearchTypeFromConsole() {
		System.out.println("请输入查询类型: 1. 用身份证查询. 2. 用准考证查询");
		Scanner scanner = new Scanner(System.in);
		int type = scanner.nextInt();
		
		if(type != 1&& type != 2) {
			System.out.println("输入有误请重新输入!");
			//此时要使得整个程序中断
			throw new RuntimeException();
		}
		return type;
	}

 3  具体查询学生信息的,返回一个Student对象,若不存在,则返回null,输入1表示用身份证查询,输入2表示用准考证查询

/**
	 * 具体查询学生信息的,返回一个Student对象,若不存在,则返回null
	 * @param searchType: 1或者2
	 * @return
	 */
	private Student searchStudent(int searchType) {
		
		String sql = "SELECT FlowId, Type, IdCard, ExamCard, Studentname, Location, Grade"
				+ " FROM examstudent WHERE ";
		
		Scanner scanner = new Scanner(System.in);
		//1. 根据输入的searchType,提示用户信息:
		//1) 若searchType为1,提示:请输入身份证号,若为2提示:请输入准考证号
		//2. 根据searchType确定SQL
		if(searchType == 1) {
			System.out.println("请输入身份证号:");
			String idCard = scanner.next();
			sql = sql + "IdCard = '" + idCard + "'";
		} else {
			System.out.println("请输入准考证号:");
			String examCard = scanner.next();
			sql = sql + "ExamCard = '" + examCard + "'";
		}
		
		
		//3. 执行查询
		Student student = getStudent(sql);
		
		//4. 若存在查询结果,把查询结果封装为一个Student对象
		return student;
	}

4通过resultSet = statement.executeQuery(sql)执行sql的查询语句,记得最后要释放资源

JDBCTools.release(resultSet, statement, connection)。

/**
	 * 根据传入的SQL返回Student对象
	 * @param sql
	 * @return
	 */
	private Student getStudent(String sql) {
		
		Student stu = null;
		
		Connection connection = null;
		java.sql.Statement statement = null;
		ResultSet resultSet = null;
		
		try {
			connection = JDBCTools.getConnection();
			statement = connection.createStatement();
			resultSet = statement.executeQuery(sql);
			
			if(resultSet.next()) {
				stu = new Student(resultSet.getInt(1), 
						resultSet.getInt(2), 
						resultSet.getString(3), 
						resultSet.getString(4), 
						resultSet.getString(5), 
						resultSet.getString(6), 
						resultSet.getInt(7));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCTools.release(resultSet, statement, connection);
		}
		return stu;
	}

 

5. 打印学生信息:若学生存在打印具体信息,若不存在:打印查无此人

/**
	 * 打印学生信息:若学生存在打印具体信息,若不存在:打印查无此人
	 * @param student
	 */
	private void printStudent(Student student) {
		if(student != null) {
			System.out.println(student);
		} else {
			System.out.println("查无此人!");
		}
		
	}

完整代码:

package com.atguigu.jdbc;

import java.beans.Statement;
import java.sql.ResultSet;
import java.util.Scanner;
import javax.management.RuntimeErrorException;
import org.junit.Test;
import com.mysql.jdbc.Connection;


public class JDBCStudent {
	@Test
	public void testGetStudent() {
		//1. 得到查询的类型
		int searchType = getSearchTypeFromConsole();
		
		//2. 具体查询学生信息
		Student student = searchStudent(searchType);
		
		//3. 打印学生信息
		printStudent(student);
	}
	
	
	/**
	 * 打印学生信息:若学生存在打印具体信息,若不存在:打印查无此人
	 * @param 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) {
		
		String sql = "SELECT FlowId, Type, IdCard, ExamCard, Studentname, Location, Grade"
				+ " FROM examstudent WHERE ";
		
		Scanner scanner = new Scanner(System.in);
		//1. 根据输入的searchType,提示用户信息:
		//1) 若searchType为1,提示:请输入身份证号,若为2提示:请输入准考证号
		//2. 根据searchType确定SQL
		if(searchType == 1) {
			System.out.println("请输入身份证号:");
			String idCard = scanner.next();
			sql = sql + "IdCard = '" + idCard + "'";
		} else {
			System.out.println("请输入准考证号:");
			String examCard = scanner.next();
			sql = sql + "ExamCard = '" + examCard + "'";
		}
		
		
		//3. 执行查询
		Student student = getStudent(sql);
		
		//4. 若存在查询结果,把查询结果封装为一个Student对象
		return student;
	}

	
	/**
	 * 根据传入的SQL返回Student对象
	 * @param sql
	 * @return
	 */
	private Student getStudent(String sql) {
		
		Student stu = null;
		
		Connection connection = null;
		java.sql.Statement statement = null;
		ResultSet resultSet = null;
		
		try {
			connection = JDBCTools.getConnection();
			statement = connection.createStatement();
			resultSet = statement.executeQuery(sql);
			
			if(resultSet.next()) {
				stu = new Student(resultSet.getInt(1), 
						resultSet.getInt(2), 
						resultSet.getString(3), 
						resultSet.getString(4), 
						resultSet.getString(5), 
						resultSet.getString(6), 
						resultSet.getInt(7));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCTools.release(resultSet, statement, connection);
		}
		return stu;
	}

	/**
	 * 从控制台读入一个整数,确定要查询的类型
	 * @return 1. 用身份证查询, 2. 用准考证查询,其他无效,并提示请用户重新输入
	 */
	private int getSearchTypeFromConsole() {
		System.out.println("请输入查询类型: 1. 用身份证查询. 2. 用准考证查询");
		Scanner scanner = new Scanner(System.in);
		int type = scanner.nextInt();
		
		if(type != 1&& type != 2) {
			System.out.println("输入有误请重新输入!");
			//此时要使得整个程序中断
			throw new RuntimeException();
		}
		return type;
	}
}

6 测试情况:
输入1:

输入2:

 

如上图所示:两种查询方法都成功了!

假如我们输入3或者其他数呢?

程序直接停止运行了,需要你重新输入。

八 综上所述,此个小程序完成的主要将任务是的学生信息录入数据库,再通过某个关键字将某个学生的信息查询出来。

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用Java中的JDBC技术,通过连接PostgreSQL数据库,查询数据并将其填充到表格中。以下是一个简单的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; public class PostgreSQLExample extends JFrame { private static final long serialVersionUID = 1L; public PostgreSQLExample() { super("PostgreSQL Example"); // 设置表格列名 String[] columnNames = {"ID", "Name", "Age"}; // 设置表格数据 String[][] data = { {"1", "Tom", "20"}, {"2", "Jerry", "22"} }; try { // 连接PostgreSQL数据库 Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection("jdbc:postgresql://host:port/database", "username", "password"); // 查询数据 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM person"); // 获取查询结果 int rowCount = 0; while (rs.next()) { rowCount++; } data = new String[rowCount][3]; rs.beforeFirst(); int i = 0; while (rs.next()) { data[i][0] = rs.getString("id"); data[i][1] = rs.getString("name"); data[i][2] = rs.getString("age"); i++; } // 关闭连接 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } // 创建表格 JTable table = new JTable(data, columnNames); // 将表格添加到窗口中 JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane); // 设置窗口属性 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setLocationRelativeTo(null); setVisible(true); } public static void main(String[] args) { new PostgreSQLExample(); } } ``` 在上述代码中,我们先手动设置了表格的列名和数据,然后通过JDBC连接PostgreSQL数据库,查询person表中的数据并将其填充到表格中。如果你需要从用户输入中获取查询条件,可以在查询数据之前添加相应的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金州饿霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值