jdbc作爲最基礎也最重要的javaAPI之一,其意義無言自明。做爲java語言的初級使用者,免不了的要與數據庫打交道,而操做數據庫的最簡單工具能夠說就是jdbc了。而且編碼者若是想學習掌握更高級的數據庫操做技術好比說orm框架例如hibernate或者mybatis等,對其熟悉也是有事半功倍的效果。本着方便本身幫助他人的目的現把網上查找到的jdbc的基本知識點整理以下,java
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@172.16.0.6:1521:tangjl"; String user="openlab"; String password="open123"; Connection Con=DriverManager.getConnection(url,user,password);
Connection 鏈接是經過DriverManager的靜態方法getConnection方法獲得的這個方法的實質時把參數傳到實際的Dirver中的connect()方法中來得到數據庫鏈接.mysql
Jdbc:oracle:this:(協議)@xxx.xxx.xxx:xxx(ip地址及端口號):xxx(使用數據庫名)sql
Mysql的url是jdbc:mysql://localhost:3306/test數據庫
String sql="select * from a_yyy"; Statement s=con.createStatment(); PreparedStatement ps=con.prepareStatement(sql);
Statement接口表明了一個數據庫的狀態,在向數據庫發送相應的SQL語句時,都須要建立Statement接口或者PreparedStatement接口。在具體應用中,Statement主要用於操做不帶參數(能夠直接運行)的SQL語句,好比刪除語句、添加或更新。編程
Sta.execute():適合任何語句api
sta.executeQuery(sql):適合查詢語句.返回一個查詢結果集.mybatis
sta.executeUpdate(sql);適合增刪改建立語句,返回值爲影響記錄的條數oracle
//////////////////////////////////////////////////框架
PreparedStatement:預編譯的Statement .工具
如果PreparedStatement:獲得ps以後:
一樣的,如果增刪改建立的就用ps.executeUpdate();如果查詢則用ps.executeQuery()返回一個結果集;
預編譯的PreparedStatement,對於執行同構的sql語句來講,它的效率比較高,提高性能.
第一步:經過鏈接得到PreparedStatement對象,用帶佔位符(?)的sql語句構造。
PreparedStatement pstm = con.preparedStatement(「select * from test where id=?」);
第二步:設置參數
pstm.setString(1,「ganbin」);
pstm.setDate(2,date);
第三步:執行sql語句
Rs = pstm.excuteQuery();
statement發送完整的Sql語句到數據庫不是直接執行而是由數據庫先編譯,再運行,而PreparedStatement是先發送帶參數的Sql語句,再發送一組參數值.若是是同構的sql語句,PreparedStatement的效率要比statement高。而對於異構的sql則二者效率差很少。
同構:兩個Sql語句可編譯部分是相同的,只有參數值不一樣。
異構:整個sql語句的格式是不一樣的
注意點:1、使用預編譯的Statement編譯多條Sql語句一次執行
2、能夠跨數據庫使用,編寫通用程序
3、能用預編譯時儘可能用預編譯
只有執行了select語句纔有結果集
六關閉數據源
關閉細節:最早獲得的,最後關閉.
元數據:是關於數據的信息,例如類型或者容量,經過JDBC API 能夠訪問:
1 數據庫元數據:
使用Connection.getMetadata方法返回DataBaseMetaData引用.
2 結果集元數據
a使用ResultSet.getMetadata方法返回ResultSetMetaData引用
B能使用getColumnCount等類的方法獲取結果集信息.(查api)
① connection.setAutoCommit(false); //把自動提交關閉
② 正常的DB 操做//如有一條SQL 語句失敗了,自動回滾
③ connection.commit() //主動提交或connection.rollback() //主動回滾
完整代碼:
try{ con.setAutoCommit(false); //step1 把自動提交關閉 Statement stm = con.createStatement(); stm.executeUpdate("insert into person(id, name, age) values(520, 'X-Man', 18)"); stm.executeUpdate("insert into Person(id, name, age) values(521, 'Super', 19)"); //step2 正常的DB 操做 con.commit(); //step3 成功主動提交 } catch(SQLException e){ con.rollback();//step3 失敗則主動回滾 }
JDBC經過元數據(MetaData)來得到具體的表的相關信息,能夠查詢數據庫中有哪些表,表有哪些字段,以及字段的屬性等.MetaData中經過一系列getXXX將這些信息返回給咱們。
數據庫元數據 DatabaseMetaData 使用connection.getMetaData()得到
MetaData包括: 包含了關於數據庫總體元數據信息。
結果集元數據 ResultSetMetaData 使用resultSet.getMetaData()得到
比較重要的是得到表的列名、列數等信息。
結果集元數據對象:ResultSetMetaData meta = rs.getMetaData();
字段個數:meta.getColomnCount();
字段名字:meta.getColumnName();
字段JDBC類型:meta.getColumnType();
字段數據庫類型:meta.getColumnTypeName();
數據庫元數據對象:DatabaseMetaData dbmd = con.getMetaData();
數據庫名=dbmd.getDatabaseProductName();
數據庫版本號=dbmd.getDatabaseProductVersion();
數據庫驅動名=dbmd.getDriverName();
數據庫驅動版本號=dbmd.getDriverVersion();
數據庫Url=dbmd.getURL();
該鏈接的登錄名=dbmd.getUserName();