昨天手機恢複出廠設定了,忘了定鬧鐘,結果第二天一睜眼就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的一種規範,試了一下,就是不寫這段代碼,也是沒問題的。