Java学习笔记-Day34 Java JDBC(三)



一、JDBC的案例

1、数据库访问的通用类的代码

package com.etc.oa.util;

import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;

/**
 * 数据库访问的通用类,实现了增加、删除、修改、查询多行记录的通用操作
 * 
 * @author tom
 *
 */
public class DBUtil {
	//数据库连接的url
	private static final String url = "jdbc:mysql://localhost:3306/companydb";
	//数据库连接的user
	private static final String user = "root";
	//数据库连接的password
	private static final String password = "root";
	
	private DBUtil() {
		
	}

	/**
	 * 建立数据库连接Connection
	 * 
	 * @return conn 数据库连接
	 */
	public static Connection getConn() {
		Connection conn = null;
		try {
			// 加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 创建数据库连接
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 封装的增加、删除和修改的通用代码(针对任何表)
	 * 
	 * @param sql    sql语句
	 * @param params sql语句的参数
	 * @return true 操作成功;false 操作失败
	 */
	public static boolean exUpdate(String sql, Object... params) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int n = 0;

		try {
			conn = getConn();
			pstmt = conn.prepareStatement(sql);
			// 给空格占位符赋值
			setParameters(pstmt, params);
			// 执行具体操作,获取结果集
			n = pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			closeAll(null, pstmt, conn);
		}
		return n > 0;
	}

	/**
	 * 设置PreparedStatement的SQl语句的参数
	 * 
	 * @param pstmt  PreparedStatement对象
	 * @param params sql语句的参数
	 * @throws SQLException SQLException异常
	 */
	private static void setParameters(PreparedStatement pstmt, Object... params) throws SQLException {
		if (params != null) {
			for (int i = 0; i < params.length; i++) {
				pstmt.setObject(i + 1, params[i]);

			}
		}
	}

	/**
	 * 封装的查询的通用代码(返回的结果是一个集合)
	 * 
	 * @param sql    Sql语句
	 * @param cla    Class对象
	 * @param params sql语句的参数
	 * @return List 集合
	 */
	public static List exQuery(String sql, Class cla, Object... params) {
		List list = new ArrayList();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			// 获取PreparedStatement对象
			conn = getConn();
			pstmt = conn.prepareStatement(sql);
			// 给空格占位符赋值
			setParameters(pstmt, params);
			// 发送Sql语句,获得结果集
			rs = pstmt.executeQuery();
			
			// 遍历结果集,最初光标指向第一行之前,通过next()方法向下移动一行
			while (rs.next()) {
				// 将当前这一行的所有列的值赋值给对象的属性
				Object obj = convert(rs, cla);
				// 将获取的对象obj添加到List集合中
				list.add(obj);
			}
		
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			closeAll(rs, pstmt, conn);
		}

		return list;
	}

	/**
	 * 转换方法 将rs读取结果转换对象
	 * 
	 * @param rs  rs对象
	 * @param cla Class对象
	 * @return Object对象
	 */
	private static Object convert(ResultSet rs, Class cla) {
		Object obj = null;
		try {
			obj = cla.newInstance();
			ResultSetMetaData rsm = rs.getMetaData();
			// getColumnCount:返回此 ResultSet对象中的总列数(从1开始)
			for (int i = 1; i <= rsm.getColumnCount(); i++) {
				// getColumnLabel:获取指定列名(如果列有别名,则获取列的别名)
				String name = rsm.getColumnLabel(i);
				Object objvalue = rs.getObject(name);
				// setProperty:直接设置对象属性的值
				BeanUtils.setProperty(obj, name, objvalue);
			}
		} catch (SQLException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
			e.printStackTrace();
		}
		return obj;
	}

	/**
	 * 释放资源
	 * 
	 * @param rs    ResultSet对象
	 * @param pstmt PreparedStatement对象
	 * @param conn  Connection对象
	 */
	public static void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) {
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (pstmt != null) {
				pstmt.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

2、图书dao访问的代码

package com.zretc.dao;

import java.util.HashMap;
import java.util.List;

import com.zretc.entity.Book;
import com.zretc.entity.BookType;

/**
 * 图书的dao访问
 * 
 * @author Administrator
 *
 */
public class BookDao extends DBUtil {
	BookTypeDao typedao = new BookTypeDao();
	/**
	 * 获取指定isbn编号的书
	 * @param isbn 图书编号
	 * @return Book对象
	 */
	public Book getBookById(String isbn) {
		String sql = "SELECT * FROM book WHERE isbn = ?;";
		List<Book> list = exQuery(sql,BookType.class,isbn);
		if(list.isEmpty()) {
			return null;
		}
		return list.get(0);
	}

	/**
	 * 1.增加图书
	 * 
	 * @param book book对象
	 * @return true 操作成功;false 操作失败
	 */
	public boolean addBook(Book book) {
		// 判断图书编号是否存在
		if (getBookById(book.getIsbn()) != null) {
			return false;
		}

		String sql = "INSERT INTO book(isbn,name,price,typeid) VALUES(?,?,?,?);";
		boolean flag = exUpdate(sql, book.getIsbn(), book.getName(), book.getPrice(),book.getBooktype().getTypeid());
		return flag;
	}

	/**
	 * 2.查询所有图书
	 * 
	 * @return list 集合
	 */
	public List<Book> getAll() {
		String sql = "SELECT * FROM book;";
		List<Book> list = exQuery(sql, Book.class, null);
		for (int i = 0; i < list.size(); i++) {
			Book book = list.get(i);
			BookType booktype = typedao.getBooktypeById(book.getTypeid());
			book.setBooktype(booktype);
		}
		return list;
	}

	/**
	 * 3.按照图书名字关键字进行模糊查询
	 * 
	 * @param name 图书检索关键字
	 * @return list 集合
	 */
	public List<Book> getBookByName(String keywords) {
		String sql = "SELECT * FROM book where name like ?;";
		List<Book> list = exQuery(sql,Book.class,"%" + keywords + "%");
		return list;// 假的 empty
	}

	/**
	 * 删除图书
	 * @param isbn 图书编号
	 * @return true 操作成功;false 操作失败
	 */
	public boolean delBook(String isbn) {
		// 判断图书编号是否存在
		if (getBookById(isbn) == null) {
			return false;
		}
		String sql = "DELETE FROM book WHERE isbn=?;";
		boolean flag = exUpdate(sql, isbn);
		return flag;
	}

	/**
	 * 修改图书
	 * @param isbn 图书编号
	 * @param price 图书价格
	 * @return true 操作成功;false 操作失败
	 */
	public boolean updateBook(String isbn, double price) {
		// 判断图书编号是否存在
		if (getBookById(isbn) == null) {
			return false;
		}

		String sql = "UPDATE book SET price=? WHERE isbn=?;";

		return exUpdate(sql, price, isbn);
	}

}

二、生成 javadoc 文档

1、生成步骤:


(1)选择要生成 javadoc 文档的 java 源文件。

在这里插入图片描述
(2)鼠标右键,选择 Export 。

在这里插入图片描述
(3)展开Java的目录,选择该目录下的 Javadoc。

在这里插入图片描述
(3)先选择 private,再点击 Finish。

在这里插入图片描述
(4)这时会弹出一个窗口,选择 Yes To All 。

在这里插入图片描述
(5)出现如下界面,已经成功生成 Javadoc 文档。

在这里插入图片描述

2、查看 Javadoc 文档


点击 doc 目录下的 index.html 文件,查看 Javadoc 文档的内容。

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值