# 在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); } ```