JDBC(1)----------基礎和簡單實現案例

1. JDBC是由SUN公司提出的一組規範,這組規範主要是由一組接口構成。主要作用就是訪問數據庫。

2、JDBC核心編程思想:


3、核心API


4、使用JDBC開發(java工程,Oracle數據庫):

1)搭建開發環境:

        創建一個java project ------> 引入(數據庫驅動jar)ojdbc6.jar

2)編碼(僞代碼):

        a)加載驅動:將實現類加載到內存中   Class.forName("oracle.jdbc.OracleDriver");

        b)獲取Connection      Connection conn = DriverManager.getConnection(url,username,password);

        c)準備sql語句         String sql = "";

        e)獲取PreparedStatement對象   PreparedStatement psmt = conn.preparedStatement(sql);

        f)sql語句是增刪改語句:

                    int i = psmt.executeUpdate();   //返回更新的行的個數

            sql語句是查詢語句:

                    ResultSet  rs = psmt.executeQuery();    //返回的結果集,常用方法 next()

        g)釋放資源,關閉連接,包括:conn,rs,ps

注意:引入(數據庫驅動jar)兩種方式:

第一種方式:右鍵--->bulid path--->config build path-->  Librarys -- > add Externaljar(到本地磁盤找到jar包所在位置)

第二種方式:在項目名上右鍵 new folder --> 將驅動jar放到此目錄下 --> 在jar包上右鍵 -->build path -->add to build path

5、在4題操作中,書寫sql語句,可以用佔位符 ‘?’,但是我們需要進行匹配佔位符(利用setXXX(),getXXX()),詳細做法在下面會用示例展示。

6、Statement 和 PreparedStatement的區別:

        a)使用Statement執行sql,是以字符串拼接方式給sql語句加入參數,這是增加了Sql注入的風險

        b)使用PreparedStatement 可以避免sql注入,提高程序的可讀性、可維護性。

7、java中的日期類型:

    a)java.util.Date   utilDate = new java.util.Date();

    b)java.sql.Date   sqlDate = new java.sql.Date(utilDate.getTime());

    c)實際應用轉換:字符串日期格式

    String str='2018-4-8';

    SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd');

    java.util.Date  utilDate  = sdf.parse(str);

    long time = utilDate.getTime();

    java.sql.Date sqlDate = new java.sql.Date(time);

8、JDBC工具類封裝

    無論是對數據查詢操作還是增、刪、改操作,都相同代碼,此時,我們需要將此代碼進行封裝。

    封裝思路:a)確定工具類中封裝那些方法:方法的修飾符   返回值類型  都是什麼。

                    對於工具類而言:修飾符是 public static  目的:便於類名直接調用

                                               返回值類型: 根據實際實現的功能而定

                                               方法名:做到見名知義

9、封裝JDBCUtil例1如下 :

public class JDBCUtil {
	static{
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnection(){
		Connection conn = null;
		try {
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","hr","123");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void closeAll(PreparedStatement ps,Connection conn,ResultSet rs){
		try{
			if(rs != null){ // 避免空指針異常
				rs.close();
			}
			if(ps != null){
				ps.close();
			}
			if(conn != null){
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

10、對於9中的代碼,我們如果更改數據庫、用戶名、密碼,我們操作需要打開源代碼進行更改,那麼有沒有一種方法,不用打開源代碼就能更新成功呢?答案是 有。利用文件、配置文件等方式,我們通常用XXX.properties和XXX.xml,在本題中我們應該選用哪一種比較好呢?

        注:xxx.XML類型的配置文件          特點:以標籤的形式保存信息;

               xxx.properties類型配置文件    特點:以key = value形式保存信息

以上特點:相比之下,我們選用XXX.properties,因爲我們文件中保存的信息是key=value形式

優化如下:

      創建一個jdbc.properties配置文件,放在src根目錄下,內容:

driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
username=hr
password=123

        完成JDBCUtil的優化如下:

public class JDBCUtil {
	public static Properties p = new Properties();
	static{
		InputStream ins = null;
		try {
			ins = JDBCUtil.class.getResourceAsStream("/jdbc.properties");
			p.load(ins);
			Class.forName(p.getProperty("driverClassName"));
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				ins.close();
			} catch (IOException e) {
				e.printStackTrace();
			}	
		}	
	}
	public static Connection getConnection(){
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void closeAll(PreparedStatement ps,Connection conn,ResultSet rs){
		try{
			if(rs != null){ // 避免空指針異常
				rs.close();
			}
			if(ps != null){
				ps.close();
			}
			if(conn != null){
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}



        


發佈了49 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章