您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“JDBC如何獲取連接”,內容詳細,步驟清晰,細節處理妥當,希望這篇“JDBC如何獲取連接”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
JDBC為訪問不同的數據庫提供了統一的接口,為使用者屏蔽了細節問題
Java程序員使用JDBC,可以連接任何提供了JDBC驅動程序的數據庫系統,完成對數據庫的各種操作。
JDBC基本原理圖
注冊驅動-加載Driver類
獲取連接-得到Connection
執行增刪改查-發送SQL給MySQL執行
釋放資源-關閉相關連接
CREATE TABLE `actor`( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(32) NOT NULL DEFAULT '', sex CHAR(1) NOT NULL DEFAULT '女', borndate DATETIME, phone VARCHAR(12));
在項目下新建一個文件夾如libs,將對應jar包拷入,并將其加入library中
public static void main(String[] args) throws SQLException { //注冊驅動 Driver driver = new Driver(); String url="jdbc:mysql://localhost:3306/zxy_db01"; String user="root"; String psd = "123"; DriverManager.registerDriver(driver); //獲得連接 Connection connection = DriverManager.getConnection(url,user,psd); //執行SQL語句 String sql = "insert into actor values(null, '劉德華', '男', '1970-11-11', '110')"; //statement 用于執行靜態 SQL 語句并返回其生成的結果的對象 Statement statement = (Statement) connection.createStatement(); int rows = statement.executeUpdate(sql); System.out.println(rows > 0 ? "成功" : "失敗"); //關閉資源 statement.close(); connection.close(); }
然后我們再去查詢數據庫,就會發現已經成功啦
相信對于上面的代碼中你最好奇的就是Statement這個類,我們就來聊一聊這個。
基本介紹:
用于執行靜態Sql語句并返回其生成結果
在連接建立后,需要對數據庫進行訪問,執行命名或是SQL語句,可以通過Statement(存在SQL注入問題)PrepardStatement(預處理) CallableStatement(存儲過程)
Statement對象執行SQL語句,存在SQL注入風險
SQL注入是利用某些系統沒有對用戶輸入對數據進行充分對檢查,而在用戶輸入數據中注入非法對SQL語句段或命令,惡意攻擊數據庫
要防范SQL注入,只要用PreparedStatement(從Statement擴展而來),取代Statement就可以了
其實歸根究底,這個類就是一個用來調用執行SQL語句的類。
這個是執行查詢的SQL時返回的對象,如下面這段代碼
String sql = "select id, name , sex, borndate from actor"; ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { // 讓光標向后移動,如果沒有更多行,則返回 false int id = resultSet.getInt(1); //獲取該行的第 1 列 String name = resultSet.getString(2);//獲取該行的第 2 列 String sex = resultSet.getString(3); Date date = resultSet.getDate(4); System.out.println(id + "\t" + name + "\t" + sex + "\t" + date); }
表示數據庫結果集的數據表,通常通過執行查詢數據庫的語句生成。
ResultSet對象保持一個光標指向其當前的數據行。 最初,光標位于第一行之前。 next方法將光標移動到下一行,并且由于在ResultSet對象中沒有更多行時返回false ,因此可在while循環中使用循環來遍歷結果集。
這個類其實和上面介紹的Statement效果類似,相當于Statement的改進版,增加了預處理過程避免了sql注入現象(簡單來講就是破獲你的數據庫中的信息),下面我們就來聊聊它
PreparedStatement執行的SQL語句中的參數用問號(?)來表示,調用PreparedStatement對象額setXxx()方法來設置這些參數,setXxx()方法有兩個參數,第一個參數是要設置的SQL語句中的參數的索引(從1開始),第二個是設置的SQL語句中的參數的值。
調用executeQuery(),返回ResultSet對象
調用 executeUpdate(),執行增刪改等操作。
其優點也是極其明顯的
不再使用+拼接SQL語句,減少語法錯誤
有效的解決了SQL注入問題
大大減少了編譯次數,效率提高
話不多說,我們直接上案例
String sql = "select name , pwd from admin where name =? and pwd = ?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, "劉德華"); preparedStatement.setString(2, "123"); ResultSet resultSet = preparedStatement.executeQuery(sql); if (resultSet.next()) { //如果查詢到一條記錄,則說明該管理存在 System.out.println("恭喜, 登錄成功"); } else { System.out.println("對不起,登錄失敗"); }
在JDBC編碼過程中,我們創建了resultSet,statement,connection等資源,這些資源在使用完畢后一定要進行關閉資源,關閉的過程中遵循從里到外的原則,因為在增刪改查中的操作中都要用到這樣的關閉操作
resultSet.close(); statement.close(); connection.close();
直接通過Driver類獲得連接
public void way1() throws SQLException { Driver driver = new Driver(); String url = "jdbc:mysql://localhost:3306/zxy_db01"; Properties info = new Properties(); info.setProperty("user","root"); info.setProperty("psd","123"); Connection connect = driver.connect(url, info); System.out.println(connect); }
通過反射的方式加載Driver類獲得連接
public void way2() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { Class<?> clzz = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver) clzz.newInstance(); String url = "jdbc:mysql://localhost:3306/zxy_db01"; Properties info = new Properties(); info.setProperty("user","root"); info.setProperty("psd","123"); Connection connect = driver.connect(url, info); System.out.println(connect); }
使用DriverManager替換Driver獲得連接
public void way3() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException { Class<?> clzz = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver) clzz.newInstance(); String url="jdbc:mysql://localhost:3306/zxy_db01"; String user="root"; String psw = "123"; DriverManager.registerDriver(driver); Connection connection = DriverManager.getConnection(url,user,password); System.out.println(connection); }
使用Class.forName自動完成驅動注冊獲得鏈接
public void way4() throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/zxy_db01"; String user="root"; String psd = "123"; Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); }
借助配置文件獲得來獲得連接
user=root psd=123 url=jdbc:mysql://localhost:3306/zxy_db01 driver=com.mysql.jdbc.Driver
public void way5() throws SQLException, ClassNotFoundException, IOException { Properties properties = new Properties(); properties.load(new FileInputStream("src\\mysql.properties")); String user = properties.getProperty("user"); String password = properties.getProperty("psd"); String url = properties.getProperty("url"); String driver = properties.getProperty("driver"); Class.forName(driver); Connection connection = DriverManager.getConnection(url, user, psd); System.out.println(connection); }
讀到這里,這篇“JDBC如何獲取連接”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。