JDBC练习题

编程对dept表实现以下操作

  • 正确搭建项目完成外置属性文件的读取
  • 分页展示dept表的数据信息,每页展示2条,并将数据封装到Dept集合中。(参数为每页条数和展示的页码)
  • 向dept表中插入"50",“DEVELOPMENT”,“JAP”(参数为dept对象)
  • 删除dept表中50号部门的信息(参数为deptno)

部门表

package practice;
/**
 * 
 * @author Yang
 *部门表
 */
public class Dept {
	private int deptno;
	private String dname;
	private String loc;

	public Dept() {

	}

	public Dept(int deptno, String dname, String loc) {
		super();
		this.deptno = deptno;
		this.dname = dname;
		this.loc = loc;
	}

	public int getDeptno() {
		return deptno;
	}

	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}

	public String getDname() {
		return dname;
	}

	public void setDname(String dname) {
		this.dname = dname;
	}

	public String getLoc() {
		return loc;
	}

	public void setLoc(String loc) {
		this.loc = loc;
	}

	@Override
	public String toString() {
		return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
	}

}

JdbcUtils类

package practice;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**外置属性文件的读取
 * 连接的获取和资源的释放
 * 解决硬编码问题
 */
public class JdbcUtils {
	// 写在静态代码块中是为了在每次类加载的时候,创建实例之前就获取连接,这样只需要一次就够了
	static String url = null;
	static String user = null;
	static String password = null;
	static {
		try {
			// 借助Properties类,然后创建一个输入流,使用反射获取里面的内容
			Properties pros = new Properties();
			//getResourceAsStream是加载.class文件里面的jdbc文件
			InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
			// 加载映射对
			pros.load(is);
			is.close();
			// 获取value值
			url = pros.getProperty("url");
			user = pros.getProperty("user");
			password = pros.getProperty("password");
			// 注册一次
			Class.forName(pros.getProperty("driver"));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 获取连接,在获取连接前,配置文件已经创建好了
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			throw new RuntimeException("获取连接失败");
		}

	}

	// 释放资源
	public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (ps != null) {
				ps.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

jdbc.properties文件

  • 在src下右键New -> File,在File name 里面输入jdbc.properties即可,然后输入内容
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///bd1906?useSSL=true
user=root
password=root

TestDept测试类

package practice;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TestDept {
	public static void main(String[] args) {
		//分页、插入、删除
		System.out.println(queryAll(1, 2));
		System.out.println(queryAll(2, 2));
		// System.out.println(insert(new Dept(50,"DEVELOPMENT","JAP")));
		// System.out.println(delete(50));

	}
	//根据题目要求传入页数跟每页显示的个数
	public static List<Dept> queryAll(int page, int num) {
		List<Dept> list = new ArrayList<Dept>();
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//调用我们自己写的类
			conn = JdbcUtils.getConnection();
			//分页查询在sql语句里面加limit限定页数
			String sql = "select * from dept limit ?,?";
			ps = conn.prepareStatement(sql);
			//我们要保证第一页是(0,2)从第0(不包含)个开始,往后数两个,便是1,2,第二页同理
			ps.setInt(1, (page - 1) * num);
			ps.setInt(2, num);
			rs = ps.executeQuery();
			//获取
			while (rs.next()) {
				int deptno = rs.getInt("deptno");
				String dname = rs.getString("dname");
				String loc = rs.getString("loc");
				Dept dept = new Dept(deptno, dname, loc);
				list.add(dept);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.close(conn, ps, rs);
		}
		return list;
	}

	public static int insert(Dept dept) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		int rows = 0;
		try {
			conn = JdbcUtils.getConnection();
			String sql = "insert into dept values(?,?,?)";
			ps = conn.prepareStatement(sql);
			ps.setInt(1, dept.getDeptno());
			ps.setString(2, dept.getDname());
			ps.setString(3, dept.getLoc());
			rows = ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.close(conn, ps, rs);
		}
		return rows;
	}
	
	public static int delete(int id) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		int rows = 0;
		try {
			conn = JdbcUtils.getConnection();
			String sql = "delete from dept where deptno =?";
			ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			rows = ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcUtils.close(conn, ps, rs);
		}
		return rows;
	}
}

插入与删除的注释参考

JDBC的入门案例

你可能感兴趣的:(MySQL)