昨天手机恢复出厂设置了,忘了定闹钟,结果第二天一睁眼就10点半了,还去上班吗?对于我这么潇洒的人来说,那肯定不去了呀,必须请假,就是这么任性,虽然在家和前端联调也敲了一天的代码,哎~
废话不多说了,今天想复习一下反射,突然就想到之前学JDBC的时候,有一行总觉得没什么卵用的代码
Class.forName("com.mysql.jdbc.Driver");
所以顺便就看了看JDBC,看了看看看看,所以这句话到底有没有毛用呢?
package study;
import entity.Person;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* *******************
* jdbc创建和执行过程
* ********************
*
* (1)创建Connection对象、SQL查询命令字符串;
* (2)对Connection对象传入SQL查询命令,获得PreparedStatement对象;
* (3)对PreparedStatement对象执行executeUpdate()或executeQurey()获得结果;
* (4)先后关闭PreparedStatement对象和Connection对象。
*/
/**
* ****************************
* 关于 Class.forName(driver);
* ****************************
*
* 实际上就是为了加载类时,调用静态初始化块中的注册函数。
* *** JDBC规范要求Driver类在使用前必须向DriverManger注册自己 ***
* Driver类中有注册自己的方法
* public class Driver extends NonRegisteringDriver implements java.sql.Driver {
* public Driver() throws SQLException {
* }
*
* static {
* try {
* DriverManager.registerDriver(new Driver());
* } catch (SQLException var1) {
* throw new RuntimeException("Can't register driver!");
* }
* }
* }
* 所以用Class.forName实际上就是为了调用这个注册驱动的方法。
* 当然我们也可以直接调用DriverManager类中的registerDriver(new com.mysql.jdbc.Driver())来进行驱动的注册
* 这样就不用Class.forName了。
*/
public class JdbcDemo {
public static void main(String[] args) {
//插入
System.out.println("============执行插入start=============");
Person personInster = new Person();
personInster.setAge(10);
personInster.setName("wangyingjie");
int insert = insert(personInster);
System.out.println("============执行插入end=============");
//更新
System.out.println("============执行更新start=============");
Person personUpdate = new Person();
personUpdate.setName("jiaxuan");
personUpdate.setAge(3);
personUpdate.setId(1);
update(personUpdate);
System.out.println("============执行更新end=============");
//查询
System.out.println("============执行查询start=============");
List<Person> personList = select();
for (Person person : personList) {
System.out.println("========" + person.getName());
}
System.out.println("============执行查询end=============");
//删除
System.out.println("============执行删除start=============");
int deleteCount = delete(3);
System.out.println("============执行删除end=============");
}
//jdbc获得连接
private static Connection getConn() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/demo";
String username = "root";
String password = "root";
Connection conn = null;
try {
Class.forName(driver); //classLoader,加载对应驱动
// 可以使用这段代码代替
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//jdbc插入数据库
private static int insert(Person person) {
Connection conn = getConn();
int i = 0;
String sql = "insert into person (Name,Age) values(?,?)";
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, person.getName());
pstmt.setInt(2, person.getAge());
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
//jdbc更新数据
private static int update(Person person) {
Connection conn = getConn();
int i = 0;
String sql = "update person set Age='" + person.getAge() + "',name='" + person.getName() + "' where id='" + person.getId() + "'";
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
//jdbc查询
private static List<Person> select() {
Connection conn = getConn();
String sql = "select id,name,age from person";
PreparedStatement preparedStatement;
List<Person> personList = new ArrayList<>();
try {
preparedStatement = conn.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
int columnCount = resultSet.getMetaData().getColumnCount();
while (resultSet.next()) {
Person person = new Person();
person.setId(resultSet.getInt(1));
person.setName(resultSet.getString(2));
person.setAge(resultSet.getInt(3));
personList.add(person);
}
preparedStatement.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return personList;
}
//删除
private static int delete(int id) {
Connection conn = getConn();
String sql = "delete from person where id = ?";
PreparedStatement preparedStatement;
int deleteCount = 0;
try {
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setInt(1, id);
deleteCount = preparedStatement.executeUpdate();
preparedStatement.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return deleteCount;
}
}
Class.forName("com.mysql.jdbc.Driver"); 这行代码是为了注册驱动,而注册驱动这个规定,是JDBC的一种规范,试了一下,就是不写这段代码,也是没问题的。