本文章为bilibili 视频的辅助文档,视频链接
https://www.bilibili.com/video/BV17F411a7rz?p=7
1、mysql环境搭建
2、数据库创建
3、项目编写
导入jar包
- 项目下创建libs文件夹
- 将jar包粘贴上去
- 右键–>build path -->add to build path
数据库映射类
package vo;
/**
* 映射数据库图书表
*
*/
public class Book {
private Integer bookId;
private String bookName;
private String authorName;
private Double price;
public Book(Integer bookId, String bookName, String authorName, Double price) {
super();
this.bookId = bookId;
this.bookName = bookName;
this.authorName = authorName;
this.price = price;
}
public Book() {
}
public Integer getBookId() {
return bookId;
}
public void setBookId(Integer bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthorName() {
return authorName;
}
public void setAuthorName(String authorName) {
this.authorName = authorName;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [bookId=" + bookId + ", bookName=" + bookName + ", authorName=" + authorName + ", price=" + price
+ "]";
}
}
加载驱动
- 利用反射,加载***com.mysql.jdbc.Driver***驱动类
Class.forName("com.mysql.jdbc.Driver");
加载driver类的原因:
原因
- 需要在调用***DriverManager***的***getConnection***方法之前,保证相应的Driver类已经被加载到jvm中
具体细节
-
jdk文档对Driver的描述中有这么一句:
当一个 Driver 类被加载时,它应该创建一个它自己的实例并将它注册到DriverManager -
***com.mysql.jdbc.Driver***继承了***java.sql.Driver***接口
-
在***jdbc.driver***的静态块里,已经new了一个Driver对象并且注册到***DriverManager***中
static
{
try
{
DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
注册了之后,即可使用***DriverManager***中的***getConnection***方法
获取连接
private static String url="jdbc:mysql://localhost:3306/book";
private static String user="root";
private static String password="root";
Connection conn = DriverManager.getConnection(url, user, password);
操作数据库
Statement介绍(sql包下)
- 用于执行静态SQL语句并返回其生成的结果的对象。
主要函数
- ***excute(String sql)***:执行给定的SQL语句,一般不用
- ***executeUpdate(String sql)***:执行给定的SQL语句,这可能是INSERT , UPDATE ,或DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。
- ***executeQuery(String sql)***:执行给定的SQL语句,返回单个***ResultSet***对象。
查询函数
public static void select() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn=null;
Statement stat=null;
ResultSet rs=null;
try {
conn = DriverManager.getConnection(url, user, password);
String sql = "SELECT * FROM book";
stat = conn.createStatement();
rs=stat.executeQuery(sql);
//遍历结果集
while(rs.next()) {
String bookId = rs.getString("book_id");
String bookName = rs.getString("book_name");
String authorName = rs.getString("author_name");
String price = rs.getString("price");
Book book = new Book(Integer.parseInt(bookId), bookName, authorName, Double.parseDouble(price));
System.out.println(book);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
stat.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
增加、删除、更新函数
PreparedStatement介绍
public interface PreparedStatement extends Statement
- 表示预编译的SQL语句的对象。
- SQL语句已预编译并存储在
PreparedStatement
对象中。 然后可以使用该对象多次有效地执行此语句。
占位符
- 用在sql语句中,具体的数据用问号代替,在sql语句外将函数传入的对象中的属性提取出来并赋值到相应的占位符中
String sql = "delete from book where book_id=?";
stat = conn.prepareStatement(sql);
//设置占位符
stat.setInt(1, book.getBookId());
stat.executeUpdate();
代码
public static void update(Emp emp){
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取数据库连接
Connection conn = null;
PreparedStatement stat = null;
try {
conn = DriverManager.getConnection(url, user, password);
//操作数据库
String sql = "update emp set ename=?,job=?,sex=?,birthday=?,sal=? where empid=?";
stat = conn.prepareStatement(sql);
stat.setString(1, emp.getEmpname());
stat.setString(2, emp.getJob());
stat.setString(3, emp.getSex());
stat.setDate(4, new Date(emp.getBirthday().getTime()));
stat.setDouble(5, emp.getSal());
stat.setInt(6, emp.getEmpid());
stat.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(stat!=null){
try {
stat.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();
}
}
}
}