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 文档的内容。