日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb学习总结(九)--JDBC入门

發(fā)布時間:2025/5/22 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb学习总结(九)--JDBC入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?一、什么是JDBC

? ? ?JDBC(Java DataBase Connectivity)就是Java數(shù)據(jù)庫連接,說白了就是用Java語言來操作數(shù)據(jù)庫。原來我們操作數(shù)據(jù)庫是在控制臺使用SQL語句來操作數(shù)據(jù)庫,JDBC是用Java語言向數(shù)據(jù)庫發(fā)送SQL語句。

?

組成JDBC的2個包:
   java.sql
   javax.sql
?開發(fā)JDBC應(yīng)用需要以上2個包的支持外,還需要導(dǎo)入相應(yīng)JDBC的數(shù)據(jù)庫實現(xiàn)(即數(shù)據(jù)庫驅(qū)動)。

?

二、實現(xiàn)代碼

package cn.zy.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.junit.Test;public class Demo01 {/** 得到數(shù)據(jù)庫連接*/public static Connection getConnection() throws Exception{//加載驅(qū)動Class.forName("com.mysql.jdbc.Driver");//mysql的urlString url = "jdbc:mysql://localhost:3306/testdb";Connection con = DriverManager.getConnection(url,"root","123456");return con;}/** 實現(xiàn)增刪改*/@Testpublic void insert() throws Exception{//得到連接Connection con = getConnection();//Statement語句的發(fā)送器,它的功能就是向數(shù)據(jù)庫發(fā)送sql語句!Statement stmt = con.createStatement();String sql = "insert user(name,password) value('scott','tiger')";//執(zhí)行sql stmt.executeUpdate(sql);}/** 查詢*/@Testpublic void query() throws Exception{Connection con = getConnection();Statement stmt = con.createStatement();String sql = "select * from user";//得到查詢出來的結(jié)果集ResultSet rs = stmt.executeQuery(sql);//輸出查詢到的結(jié)果while (rs.next()){String username = rs.getString("name");String password = rs.getString("password");System.out.println(username + ','+ password);}/** 關(guān)閉資源*/rs.close();stmt.close();con.close();} }

?

三、JDBC對象介紹

在JDBC中常用的類有:

  • DriverManager
  • Connection
  • Statement
  • ResultSet

3.1 DriverManager

?Jdbc程序中的DriverManager用于加載驅(qū)動,并創(chuàng)建與數(shù)據(jù)庫的鏈接,這個API的常用方法:

?? ?DriverManager.getConnection(url, user, password);

常用數(shù)據(jù)庫URL地址的寫法:

?

  • Oracle寫法:jdbc:oracle:thin:@localhost:1521:sid ? ? ? ? (driverClassName:oracle.jdbc.driver.OracleDriver)
  • SqlServer寫法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
  • MySql寫法:jdbc:mysql://localhost:3306/sid

?

3.2 Connection

? ?Jdbc程序中的Connection,它用于代表數(shù)據(jù)庫的鏈接,Collection是數(shù)據(jù)庫編程中最重要的一個對象,客戶端與數(shù)據(jù)庫所有交互都是通過connection對象完成的,這個對象的常用方法:

  • createStatement():創(chuàng)建向數(shù)據(jù)庫發(fā)送sql的statement對象。
  • prepareStatement(sql) :創(chuàng)建向數(shù)據(jù)庫發(fā)送預(yù)編譯sql的PrepareSatement對象。
  • prepareCall(sql):創(chuàng)建執(zhí)行存儲過程的callableStatement對象。
  • setAutoCommit(boolean?autoCommit):設(shè)置事務(wù)是否自動提交。
  • commit() :在鏈接上提交事務(wù)。
  • rollback() :在此鏈接上回滾事務(wù)。

3.3 Statement

Jdbc程序中的Statement對象用于向數(shù)據(jù)庫發(fā)送SQL語句, Statement對象常用方法:

  • executeQuery(String?sql) :用于向數(shù)據(jù)發(fā)送查詢語句。
  • executeUpdate(String?sql):用于向數(shù)據(jù)庫發(fā)送insert、update或delete語句
  • execute(String sql):用于向數(shù)據(jù)庫發(fā)送任意sql語句
  • addBatch(String?sql) :把多條sql語句放到一個批處理中。
  • executeBatch():向數(shù)據(jù)庫發(fā)送一批sql語句執(zhí)行。

3.4 ResultSet

Jdbc程序中的ResultSet用于代表Sql語句的執(zhí)行結(jié)果。Resultset封裝執(zhí)行結(jié)果時,采用的類似于表格的方式。ResultSet 對象維護(hù)了一個指向表格數(shù)據(jù)行的游標(biāo),初始的時候,游標(biāo)在第一行之前,調(diào)用ResultSet.next() 方法,可以使游標(biāo)指向具體的數(shù)據(jù)行,進(jìn)行調(diào)用方法獲取該行的數(shù)據(jù)。
  ResultSet既然用于封裝執(zhí)行結(jié)果的,所以該對象提供的都是用于獲取數(shù)據(jù)的get方法:
  獲取任意類型的數(shù)據(jù)
    getObject(int index)
    getObject(string columnName)
  獲取指定類型的數(shù)據(jù),例如:
    getString(int index)
    getString(String columnName)

  ResultSet還提供了對結(jié)果集進(jìn)行滾動的方法:

  • next():移動到下一行
  • Previous():移動到前一行
  • absolute(int row):移動到指定行
  • beforeFirst():移動resultSet的最前面。
  • afterLast() :移動到resultSet的最后面。

3.5?PreparedStatement

??PreperedStatement是Statement的子類,它的實例對象可以通過調(diào)用Connection.preparedStatement()方法獲得,相對于Statement對象而言:PreperedStatement可以避免SQL注入的問題。在實際項目中,應(yīng)該都使用PreparedStatement.
  Statement會使數(shù)據(jù)庫頻繁編譯SQL,可能造成數(shù)據(jù)庫緩沖區(qū)溢出。PreparedStatement可對SQL進(jìn)行預(yù)編譯,從而提高數(shù)據(jù)庫的執(zhí)行效率。并且PreperedStatement對于sql中的參數(shù),允許使用占位符的形式進(jìn)行替換,簡化sql語句的編寫。

?

?注意MySQL中默認(rèn)是沒有開啟預(yù)編譯的,如果需要打開需要修改url:jdbc:mysql://localhost:3306/test?useServerPrepStmts=true

四、使用JdbcUtils和PreparedStatement

1. 創(chuàng)建users表

CREATE TABLE users(id INT PRIMARY KEY,NAME VARCHAR(40),PASSWORD VARCHAR(40),email VARCHAR(60),birthday DATE );

2. 新建一個Java工程,導(dǎo)入驅(qū)動包,在src下創(chuàng)建一個db.properties文件

?

?在db.properties中編寫MySQL數(shù)據(jù)庫的連接信息,如下所示:

driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/testdb username=root password=123456

3.編寫一個JdbcUtils工具類,用于連接數(shù)據(jù)庫,獲取數(shù)據(jù)庫連接和釋放數(shù)據(jù)庫連接,代碼如下:

package cn.zy.utils;import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;public class JdbcUtils {private static Properties props = null;private static String driver = null;private static String url = null;private static String username = null;private static String password = null;//只在JdbcUtils類被加載時執(zhí)行一次!static {try {// 給props進(jìn)行初始化,即加載dbconfig.properties文件到props對象中InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");Properties prop = new Properties();prop.load(in);//獲取數(shù)據(jù)庫的驅(qū)動driver = prop.getProperty("driver");//獲取urlurl= prop.getProperty("url");//獲取用戶名username = prop.getProperty("username");//獲取密碼password = prop.getProperty("password");//加載驅(qū)動 Class.forName(driver);} catch (Exception e) {throw new ExceptionInInitializerError(e);}}/** 獲取數(shù)據(jù)庫連接對象*/public static Connection getConnection() throws SQLException{return DriverManager.getConnection(url,username,password);}/** 釋放資源*/public static void release(Connection conn,Statement st,ResultSet rs){if(rs!=null){try{//關(guān)閉存儲查詢結(jié)果的ResultSet對象 rs.close();}catch (Exception e) {e.printStackTrace();}rs = null;}if(st!=null){try{//關(guān)閉負(fù)責(zé)執(zhí)行SQL命令的Statement對象 st.close();}catch (Exception e) {e.printStackTrace();}}if(conn!=null){try{//關(guān)閉Connection數(shù)據(jù)庫連接對象 conn.close();}catch (Exception e) {e.printStackTrace();}}} }

?

4.使用PreparedStatement實現(xiàn)增刪改查

package cn.zy.test;import java.sql.Connection; import java.util.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;import org.junit.Test;import cn.zy.utils.JdbcUtils;public class JdbcUtilsTest {@Testpublic void insert(){Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try {//獲取一個數(shù)據(jù)庫連接conn = JdbcUtils.getConnection();//要執(zhí)行的SQL模板,SQL中的參數(shù)使用?作為占位符String sql = "insert into users(id,name,password,email,birthday) values(?,?,?,?,?)";//通過conn對象獲取負(fù)責(zé)執(zhí)行SQL命令的prepareStatement對象st = conn.prepareStatement(sql);//為SQL語句中的參數(shù)賦值,注意,索引是從1開始的st.setInt(1, 1);st.setString(2,"scott");st.setString(3,"tiger");st.setString(4, "zy5724@163.com");st.setDate(5, new java.sql.Date(new Date().getTime()));int num = st.executeUpdate();if (num>0){System.out.print("更新成功");}} catch (SQLException e) {e.printStackTrace();}finally{JdbcUtils.release(conn, st, rs);}}@Testpublic void query(){Connection conn = null;PreparedStatement st = null;ResultSet rs = null;try {//獲取一個數(shù)據(jù)庫連接conn = JdbcUtils.getConnection();//要執(zhí)行的SQL模板,SQL中的參數(shù)使用?作為占位符String sql = "select * from users where id=?";//通過conn對象獲取負(fù)責(zé)執(zhí)行SQL命令的prepareStatement對象st = conn.prepareStatement(sql);st.setInt(1, 1);rs = st.executeQuery();if (rs.next()){System.out.println(rs.getString("name"));}} catch (SQLException e) {e.printStackTrace();}finally{JdbcUtils.release(conn, st, rs);}} }

?

總結(jié)

以上是生活随笔為你收集整理的JavaWeb学习总结(九)--JDBC入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女精品久久久 | 午夜色av | 精品无码久久久久久国产 | 成人91av | www.毛片com| www婷婷av久久久影片 | 国产精品高潮av | 久久久久久亚洲精品中文字幕 | 奇米精品一区二区三区在线观看 | 午夜免费福利视频 | 免费观看av网址 | 色狠狠一区二区三区香蕉 | 国产精品视频无码 | 青青草欧美 | 日韩av中文字幕在线播放 | 久久国产福利 | 日本三级黄色大片 | 污到下面流水的视频 | 无码视频一区二区三区 | 国产日韩欧美精品在线观看 | 欧美操大逼 | 天堂中文在线观看视频 | 亚洲男人天堂视频 | 国产乱码精品一区二三赶尸艳谈 | 一区二区三区美女视频 | 国产伦精品一区二区三区视频女 | 伊人久久在线 | 黑人专干日本人xxxx | 韩国av电影在线观看 | 日韩在线不卡一区 | 床戏高潮做进去大尺度视频网站 | 国产乱人视频 | 国产精品又黄又爽又色无遮挡 | 99热99这里只有精品 | 欧美一级特黄aa大片 | 亚洲AV无码精品色 | 99久久国产综合 | 国产精品1区 | 久久综合免费视频 | 久草视频免费播放 | 欧美日本激情 | 人人上人人干 | 国产模特av私拍大尺度 | 亚洲av综合色区无码一区 | 一个人免费在线观看视频 | 久久亚洲中文字幕无码 | 亚洲成人精 | 综合国产在线 | 中文字幕在线观看第二页 | 久久综合国产精品 | h片在线免费观看 | 日韩国产精品视频 | 苍井空浴缸大战猛男120分钟 | 香蕉久久a毛片 | www.久草.com | 一级大片儿 | 国产高清免费av | 成人免费观看av | 天天舔日日操 | 午夜视频在线观看一区 | 国产在线观看www | 久艹视频在线观看 | 亚洲国产精品欧美久久 | 污污网站免费 | 精品国产乱码久久久久久牛牛 | 欧美自拍视频在线观看 | 四虎影视最新网址 | 亚洲综合在线观看视频 | 91操人视频 | 亚洲天天操 | 欧美日韩二三区 | 亚洲色图综合 | 午夜精品免费 | 亚洲欧美日本一区二区三区 | 蜜桃视频一区二区三区 | 亚洲播播| 日韩一区二区在线免费观看 | 久久精品在线免费观看 | 国产亚洲AV无码成人网站在线 | 在线观看高清视频 | 天天想你在线观看完整版电影高清 | 亚洲av无码国产精品永久一区 | yy77777丰满少妇影院 | 国产精品破处 | 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 不卡视频一区二区 | 国产精品亚洲αv天堂无码 伊人性视频 | 午夜av网| 亚洲国产极品 | 亚洲h网站 | 91精品国产福利在线观看 | 少妇高潮一区二区三区99小说 | 日本国产网站 | 欧美日韩精 | 少妇熟女一区 | 麻豆porn| 国产肉体xxxx裸体784大胆 | 99精品国产成人一区二区 | 91尤物视频 |