JDBC数据库连接+增删改查+释放资源

数据库连接工具类

package util;

import java.io.IOException;
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 DbUtil {
	private static DbUtil dbUtil;
	private String driver;
	private String url;
	private String user;
	private String password;

	//单例模式,避免重复调用
	public static DbUtil getDbUtil() {
		if (dbUtil == null) {
			dbUtil = new DbUtil();
		}
		return dbUtil;
	}

	private DbUtil() {
		Properties p = new Properties();
		try {
			p.load(DbUtil.class.getClassLoader().getResourceAsStream("db.properties"));
			driver = p.getProperty("driver");
			url = p.getProperty("url");
			user = p.getProperty("user");
			password = p.getProperty("password");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	//释放连接,避免占用太多资源
	public void close(Connection conn, PreparedStatement p, ResultSet set) {
		if (set != null) {
			try {
				set.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (p != null) {
			try {
				p.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	//获取连接
	public Connection getConn() {
		Connection conn = null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}

}

配置文件(此处为mysql 连接,若想换数据库,则修改配置文件即可,上述工具类中绑定的是db.properties。也就是本配置文件的名字。配置文件放src目录下即可。)

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/exame?serverTimezone=GMT%2B8

user=root

password=123456

数据库插入

	public int addStudentPaperLink(int studentid, int paperid) {
		// 获取数据库的连接
		Connection conn = DbUtil.getDbUtil().getConn();
		// 绑定sql的方法
		PreparedStatement p = null;
		// 定义sql语句
		String sql = "insert into student_paper(studentid,paperid,state) values(?,?,?) ";
		try {
			// 绑定sql语句
			p = conn.prepareStatement(sql);
			// 将sql中的?用参数替代
			p.setInt(1, studentid);
			p.setInt(2, paperid);
			p.setString(3, "未考");
			// 将查询的结果放入set结果集中
			int key = p.executeUpdate();
			// key为执行影响行数
			return key;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放连接
			DbUtil.getDbUtil().close(conn, p, null);
		}
		// 返回对象。 如果结果集不为空,则对象已经存放好了信息。如果结果集为空,则没有存放入信息
		return 0;
	}

数据库删除

public int deleteStudent(int id) {
		// 获取数据库的连接
		Connection conn = DbUtil.getDbUtil().getConn();
		// 绑定sql的方法
		PreparedStatement p = null;
		// 定义sql语句
		String sql = "delete from student where id=? ";
		try {
			// 绑定sql语句
			p = conn.prepareStatement(sql);
			// 将sql中的?用参数替代
			p.setInt(1, id);
			// 将查询的结果放入set结果集中
			int key = p.executeUpdate();
			// key为执行影响行数
			return key;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放连接
			DbUtil.getDbUtil().close(conn, p, null);
		}
		// 返回对象。 如果结果集不为空,则对象已经存放好了信息。如果结果集为空,则没有存放入信息
		return 0;
	}

数据库修改

	public int updateStudentSubject(int id, String state) {
		// 获取数据库的连接
		Connection conn = DbUtil.getDbUtil().getConn();
		// 绑定sql的方法
		PreparedStatement p = null;
		// 定义sql语句
		String sql = "update student_subject set state=? where id=? ";
		try {
			// 绑定sql语句
			p = conn.prepareStatement(sql);
			// 将sql中的?用参数替代
			p.setString(1, state);
			p.setInt(2, id);
			// 将查询的结果放入set结果集中
			int key = p.executeUpdate();
			// key为执行影响行数
			return key;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放连接
			DbUtil.getDbUtil().close(conn, p, null);
		}
		// 返回对象。 如果结果集不为空,则对象已经存放好了信息。如果结果集为空,则没有存放入信息
		return 0;
	}

数据库单个属性查询

	public String getStudentState(String stuno) {
		// 获取数据库的连接
		Connection conn = DbUtil.getDbUtil().getConn();
		// 绑定sql的方法
		PreparedStatement p = null;
		// 结果集。用于存放数据库中取出的数据
		ResultSet set = null;
		// 初始化state。用于存放后续取出的信息
		String state = null;
		// 定义sql语句
		String sql = "select state from student where stuno=? ";
		try {
			// 绑定sql语句
			p = conn.prepareStatement(sql);
			// 将sql中的?用参数替代
			p.setString(1, stuno);
			// 将查询的结果放入set结果集中
			set = p.executeQuery();
			// 如果结果集不为空。set.next()=true
			if (set.next()) {
				// 将结果集的信息存放到一开始初始化的对象中
				state = set.getString("state");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放连接
			DbUtil.getDbUtil().close(conn, p, set);
		}
		// 返回对象。 如果结果集不为空,则对象已经存放好了信息。如果结果集为空,则没有存放入信息
		return state;
	}

数据库单个对象查询

	public Student Login(String stuno, String pwd) {
		// 获取数据库的连接
		Connection conn = DbUtil.getDbUtil().getConn();
		// 绑定sql的方法
		PreparedStatement p = null;
		// 结果集。用于存放数据库中取出的数据
		ResultSet set = null;
		// 初始化学生对象。用于存放后续取出的学生信息
		Student stu = null;
		// 定义sql语句
		String sql = "select * from student where stuno=? and pwd =?";
		try {
			// 绑定sql语句
			p = conn.prepareStatement(sql);
			// 将sql中的?用参数替代
			p.setString(1, stuno);
			p.setString(2, pwd);
			// 将查询的结果放入set结果集中
			set = p.executeQuery();
			// 如果结果集不为空。set.next()=true
			if (set.next()) {
				// 将结果集的信息存放到一开始初始化的对象中
				stu = new Student(set.getInt("id"), set.getString("name"), set.getString("stuno"), set.getString("pwd"),
						set.getString("state"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放连接
			DbUtil.getDbUtil().close(conn, p, set);
		}
		// 返回对象。 如果结果集不为空,则对象已经存放好了信息。如果结果集为空,则没有存放入信息
		return stu;
	}

数据库集合查询

	public List<Student> getStudentByPaperId(int id) {
		// 获取数据库的连接
		Connection conn = DbUtil.getDbUtil().getConn();
		// 绑定sql的方法
		PreparedStatement p = null;
		// 结果集。用于存放数据库中取出的数据
		ResultSet set = null;
		// 初始化题目集合对象。用于存放后续取出的学生信息
		List<Student> list = new ArrayList<Student>();
		// 定义sql语句
		String sql = "select *,b.state from student a join  student_paper b on a.id=b. studentid where b.paperid=? ";
		try {
			// 绑定sql语句
			p = conn.prepareStatement(sql);
			p.setInt(1, id);
			// 将查询的结果放入set结果集中
			set = p.executeQuery();
			// 如果结果集不为空。set.next()=true
			while (set.next()) {
				// 将结果集的信息存放到一开始初始化的对象中
				Student stu = new Student(set.getInt("id"), set.getString("name"), set.getString("stuno"),
						set.getString("pwd"), set.getString("state"));
				stu.setPaperState(set.getString("b.state"));
				list.add(stu);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 释放连接
			DbUtil.getDbUtil().close(conn, p, set);
		}
		// 返回对象。 如果结果集不为空,则对象已经存放好了信息。如果结果集为空,则没有存放入信息
		return list;
	}

猜你喜欢

转载自blog.csdn.net/IT_Java_Roy/article/details/88989720