【MyBatis】1:JDBC程式設計存在的問題

連江偉發表於2016-07-29

        做Java開發,如何運算元據庫?想必大家都知道,使用JDBC(Java Data Base Connectivity),這是一種用於執行SQL語句的Java API,可以為多種關係型資料庫提供統一訪問,它是由一組用Java編寫的類和介面組成。JDBC提供了一種基準,在此基礎上我們可以構建更高階的工具和介面,使資料庫開發人員能夠更加方便和輕鬆的編寫資料庫應用程式。

        JDBC程式設計8步走:

        1載入資料庫驅動

        2建立並獲取資料庫連線

        3建立jdbc statement物件

        4設定sql語句

        5設定sql語句中引數(使用preparedStatement)

        6通過statement執行sql語句並獲取結果

        7對sql執行結果進行解析處理

        8釋放所有的資源(resultSet、preparedStatement、connection)

        捋清楚了編碼思路,來,上機敲程式碼……

public class JdbcTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//資料庫連線
		Connection connection = null;
		//預編譯的Statement,使用預編譯的Statement提高資料庫效能
		PreparedStatement preparedStatement = null;
		//結果集
		ResultSet resultSet = null;
		
		try {
			//載入資料庫驅動
			Class.forName("com.mysql.jdbc.Driver");
			
			//通過驅動管理類獲取資料庫連結
			connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/shop?characterEncoding=utf-8", "root", "");
			//定義sql語句 ?表示佔位符
			String sql = "select * from user where username = ?";
			//獲取預處理statement
			preparedStatement = connection.prepareStatement(sql);
			//設定引數,第一個引數為sql語句中引數的序號(從1開始),第二個引數為設定的引數值
			preparedStatement.setString(1, "ljw");
			//向資料庫發出sql執行查詢,查詢出結果集
			resultSet =  preparedStatement.executeQuery();
			//遍歷查詢結果集
			while(resultSet.next()){
				System.out.println(resultSet.getString("uid")+"  "+resultSet.getString("username"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//釋放所有的資源
			if(resultSet!=null){
				try {
					resultSet.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(preparedStatement!=null){
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(connection!=null){
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}

		}

	}

}

        編寫完程式碼之後,我們回過頭去分析使用JDBC程式設計存在一些什麼問題。

        1如果使用JDBC做開發,那麼資料庫連線將會大量的被建立,並且每一次的建立最終都要釋放資源,如此頻繁的操作將嚴重影響系統的效能,同時也會造成系統資源的浪費,一個很好的解決辦法是使用資料庫連線池。

        2使用JDBC進行開發,sql語句是寫死在程式碼裡面的,也就是所謂的硬編碼,這樣會造成程式碼極難維護,因為實際的需求會有變動,一旦需求有變,我們就要修改java原始碼,並進行再次的編譯和部署,簡直是麻煩。

        3使用PreparedStatement物件向sql語句的佔位符中傳遞引數的時候,也存在硬編碼的情況,實際應用中sql語句的where條件是不固定的,可能多也可能少,每一次的變動都要修改java程式碼,系統維護困難。

        4在最後對結果集進行解析和輸出的時候,也存在硬編碼的情況(即查詢列名),這樣一來,sql語句如果變化,那麼對應的解析程式碼也將隨之變化,系統不易維護,比較好的解決辦法是將資料庫記錄封裝成pojo物件再進行解析。

        綜上來看,使用JDBC程式設計存在不少的問題,當然上面列舉的也只是一部分而已,還有開發效率問題,程式碼複用率問題等等。瞭解了這些問題,我們才能更好的理解,接下來我們要學習的MyBatis是如何解決這些問題的。

相關文章