<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
快速學會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時返回的物件,如下面這段程式碼
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已經有了不錯的瞭解了
到此這篇關於一文快速學會JDBC及獲取連線的五種方式的文章就介紹到這了,更多相關學會JDBC及獲取連線方式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45