# 在java中執行sql指令(JAVA連接MYSQL)
###### tags: `Java -網頁功能實現` `Java Web-知識點未完善`
SQL(結構化查詢語言),是用於儲存資料的資料庫,同時也能查詢裡頭存放的資料,如果我們想在JAVA中引用,甚至篩選出SQL中的資料,就必須參考以下步驟
### 步驟一:先確立與資料庫的連接
為了確定是與哪個資料庫連接,才能取出需要的資料,我們需要取得資料庫的相關資料,因此先創立一個抽像類別來建立與資料庫的連接
(本次欲連接的資料庫資訊,連接至fruitdb)
![](https://i.imgur.com/2QgUOEl.png)
```java=
//載入 MySQL 的 Driver,又分成"com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver,這裡以後者來示範"
public final String DRIVER = "com.mysql.cj.jdbc.Driver" ;
//確立資料庫的連接位置,先鎖定localhost(端口號),再確定資料庫名稱(fruitdb),後面先照著複製就好,記得加上時區(serverTimezone)
public final String URL = "jdbc:mysql://localhost:3306/fruitdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";
//用戶名與密碼,視作我們從java登入MYSQL中
public final String USER = "root";
public final String PWD = "123456" ;
```
### 步驟二:在需要使用資料庫的函式中確立連接
首先分別建立Connection、PreparedStatement、ResultSet類別的物件,作為函式與資料庫連接時的核對
```java=
protected Connection conn ;
protected PreparedStatement psmt ;
protected ResultSet rs ;
```
(此段過程複雜,先做個紀錄,日後補充)
```java=
protected Connection getConn(){
try {
//1.加载驱动
Class.forName(DRIVER);
//2.通过驱动管理器获取连接对象
return DriverManager.getConnection(URL, USER, PWD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return null ;
}
```
```java=
protected int executeUpdate(String sql , Object... params){
boolean insertFlag = false ;
insertFlag = sql.trim().toUpperCase().startsWith("INSERT");
try {
conn = getConn();
if(insertFlag){
psmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
}else {
psmt = conn.prepareStatement(sql);
}
setParams(psmt,params);
int count = psmt.executeUpdate() ;
if(insertFlag){
rs = psmt.getGeneratedKeys();
if(rs.next()){
return ((Long)rs.getLong(1)).intValue();
}
}
return count ;
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(rs,psmt,conn);
}
return 0;
}
```
### 步驟三:讓想使用這個資料庫的人繼承該抽象類別
此類別繼承連接MySQL的抽象類別,因此可以使用該資料庫的資料
```java=
public class FruitDAOImpl extends BaseDAO<Fruit> implements FruitDAO
```
### 步驟四:直接super引用父類中的已經連接資料的函式
```java=
@Override
public List<Fruit> getFruitList(String keyword , Integer pageNo) {
//引用BaseDAO中的executeQuery函式
//因為該函式已經連接成功數據庫,因此可以直接使用MySQL的語法
return super.executeQuery("select * from t_fruit where fname like ? or remark like ? limit ? , 5" ,"%"+keyword+"%","%"+keyword+"%", (pageNo-1)*5);
}
```