一,、常用JDBC API 在java.sql包中包含體現(xiàn)JDBC基本功能的若干接口和類: 1.Driver 接口:代表驅(qū)動程序 2.DriverManager 類:驅(qū)動程序管理員 3.Connection 接口:代表數(shù)據(jù)庫連接 4.Statement 、PreparedStatement,、CallableStatement 接口:代表數(shù)據(jù)庫操作對象 5.ResultSet 接口:代表結(jié)果集 6.DatabaseMetadata,、ResultSetMetadata接口:代表元數(shù)據(jù) 7.Types 類:代表JDBC類型 ===============================================================================
二、若干API的具體說明 Statement和 PreparedStatement ------SQL語句執(zhí)行接口 Statement 接口代表了一個數(shù)據(jù)庫的狀態(tài),,再向數(shù)據(jù)庫發(fā)送相應(yīng)的SQL語句時,,都需要創(chuàng)建Statement 接口或者PreparedStatement 接口。 Statement 主要用于操作不帶參數(shù)的SQL語句,,比如增,、刪、改,。 PreparedStatement:預(yù)編譯的Statement接口 第一步:通過連接獲得PreparedStatement 接口對象,,用帶占位符(?)的sql語句構(gòu)造,。 PreparedStatement ps=con.praperedStatement("select * from test where id=?"); 第二步:設(shè)置參數(shù) ps.setString(1,"5"); 第三步:執(zhí)行sql語句 rs= ps.executeQuery();
Statement 發(fā)送完整的sql語句到數(shù)據(jù)庫不是直接執(zhí)行,,而是先編譯,、后運(yùn)行,。 PreparedStatement 先發(fā)送帶參數(shù)的sql語句,在發(fā)送一組參數(shù)值,。 如果是同構(gòu)的sql語句,,則PreparedStatement 效率高。對于異構(gòu)的sql語句,,兩者效率差不多,。 同構(gòu): 兩個sql語句可編譯的部分是相同的,只有參數(shù)值不同,。 異構(gòu): 兩個sql語句的格式是不同的,。 注意點:1.使用預(yù)編譯的Statement (即PreparedStatement )編譯多條sql語句一起執(zhí)行。 2.可以跨數(shù)據(jù)庫使用,,編寫通用程序,。 3.能用預(yù)編譯時盡量用預(yù)編譯。 --------------------------------------------------------------------------------------------------------
ResultSet接口: ResultSet接口是查詢結(jié)果集接口,,它對返回的結(jié)果集進(jìn)行處理,。ResultSet是程序員進(jìn)行JDBC操作的必須接口,。 ---------------------------------------------------------------------------------------------------------
ResultSetMetaData----元數(shù)據(jù)操作接口: ResultSetMetaData 是對元數(shù)據(jù)進(jìn)行操作的接口,可以實現(xiàn)很多高級功能,。Hibernate運(yùn)行數(shù)據(jù)庫的操作,,大多是通過此接口??梢哉J(rèn)為,,此接口是SQL查詢語言的一種反射機(jī)制。ResultSetMetaData 可以通過數(shù)據(jù)的形式,,來遍歷數(shù)據(jù)庫各個字段的屬性,。對于開發(fā)者來說,此機(jī)制意義重大,。 JDBC通過元數(shù)據(jù)(MetaData)來獲取具體的表相關(guān)的信息,,例如,可以查詢數(shù)據(jù)庫中有哪些表,、標(biāo)有哪些字段,、字段的屬性等。MetaData 通過一系列的getXXX 將這些信息返回給我們,。 MetaData元數(shù)據(jù)包括 數(shù)據(jù)庫源數(shù)據(jù)DatabaseMetadata 和 結(jié)果集元數(shù)據(jù)ResultSetMetaData ,。 數(shù)據(jù)庫源數(shù)據(jù)DatabaseMetadata: 使用connection.getMetaData()獲得了關(guān)于數(shù)據(jù)庫整體的元數(shù)據(jù)信息。 結(jié)果集元數(shù)據(jù)ResultSetMetaData: resultSet.getDataMeta獲得的比較重要的是表的列名,、列的屬性等信息,。 結(jié)果集元數(shù)據(jù)對象: ResultSetMetaData meta = rs.getDataMeta(); 字段個數(shù):meta.getColumnCount(); 字段名字:meta.getColumnName(); 字段JDBC類型:meta.getColumnType(); 字段數(shù)據(jù)庫類型:meta.getColumnTypeName(); 數(shù)據(jù)庫元數(shù)據(jù)對象: DatabaseMetaData meta = con.getMetaData(); 數(shù)據(jù)庫名:meta.getDatabaseProductName(); 數(shù)據(jù)庫版本號:meta.getDatabaseProductVersion(); 數(shù)據(jù)庫驅(qū)動名:meta.getDriverName(); 數(shù)據(jù)庫驅(qū)動版本號:meta.getDriverVersion(); 數(shù)據(jù)庫URL:meta.getURL(); 該連接的數(shù)據(jù)庫登錄名:meta.getUserName(); -------------------------------------------------------------------------------------------------------------------------------------
三、JDBC應(yīng)用程序的基本步驟: 1.注冊驅(qū)動 2.建立數(shù)據(jù)庫連接 3.創(chuàng)建數(shù)據(jù)庫操作對象 4.執(zhí)行SQL 5.處理結(jié)果集 6.關(guān)閉JDBC對象
1.注冊一個驅(qū)動driver 注冊驅(qū)動程序的三種方式: 方式一:Class.forName("Oracle.jdbc.driver.OracleDriver"); 方式二:Driver driver=new Oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver(driver); 方式三:編譯時在虛擬機(jī)中加載驅(qū)動 javac -D jdbc.drivers = oracle.jabc.driver.OracleDriver xxx.java java -D jabc.drivers = 驅(qū)動全名 類名 使用系統(tǒng)屬性名,,加載驅(qū)動 -D表示為系統(tǒng)屬性賦值 附:mysql 的Driver全名:com.mysql.jdbc.Driver sqlserver 的Driver全名:com.microsoft.jdbc.sqlserver.SQLServerDriver 2.建立連接 conn=DriverManager.getConnection ("jdbc:oracle.thin:@192.168.0.254:1521/test","username","password"); 上面括號中放的是:oracle自協(xié)議+@+ip:port / 數(shù)據(jù)庫實例名,,數(shù)據(jù)庫用戶名,用戶密碼,。 mysql url寫法:jdbc:mysql://192.168.254:3306/test 3.獲得一個Statement對象 sta = conn.createStatement(); 4.通過Statement執(zhí)行sql語句 sta.excuteQuery(sql);//返回一個查詢結(jié)果集 sta.executeUpdate(sql);//返回值為 int 型,,表示影響記錄的條數(shù) 將sql語句通過連接發(fā)送到數(shù)據(jù)庫中執(zhí)行,以實現(xiàn)對數(shù)據(jù)庫的操作,。 5.處理結(jié)果集 使用Connection對象獲得一個Stagement,,Statement中的executeQuery(String sql)方法可以使用select語句查詢,并返回一個結(jié)果集 ResultSet ,。通過遍歷這個結(jié)果集,,可以獲得select語句的查詢結(jié)果。ResultSet的next()方法會操作一個游標(biāo)從第一條記錄開始讀取,,直到最后一天記 錄,。 executeUpdate(String sql)方法用于執(zhí)行 DDL /DML 語句,比如update,,delete等,。 只有select語句才有返回結(jié)果集,。 例:Statement sta = con.createStatement(); //創(chuàng)建statement對象 String sql = " insert into test(id,name) values(1"+" " " "+"king"+" "" "+") "; sta.executeUpdate(sql); //執(zhí)行sql語句 String sql = "select * from test"; ReslutSet rs = sta.executeQuery(sql);//執(zhí)行sql語句后有結(jié)果集 //遍歷處理結(jié)果集 while(rs.next()){ System.out.println(rs.getInt("id")); System.out.println(rs.getString("name")); } 6.關(guān)閉數(shù)據(jù)庫連接(釋放資源) 調(diào)用close()方法: rs.close(); sta.close(); conn.close(); ResultSet 、Statement 和Connetction是依次依賴的,。 注意:要按先 ResultSet ,,再Statement,最后Connetction的順序關(guān)閉資源,。因ResultSet和Statement在連接的情況下才能使用,,所以在連使用束 后可能還有其他的statement還在連接,所以不能先關(guān)閉Connection,。
|
|
來自: 昵稱21365845 > 《JDBC》