對原生態JDBC程序中問題總結

環境

eclipse:mars

mysql:5.5.29

java環境:jdk1.7.0_65


創建mysql數據庫

導入下面的腳本:


sql_table.sql:記錄表結構

sql_data.sql:記錄測試數據,在實際企業開發中,最後提供一個初始化數據腳本。



jdbc編程步驟

1、 加載數據庫驅動

2、 創建並獲取數據庫鏈接

3、 創建jdbc statement對象

4、 設置sql語句

5、 設置sql語句中的參數(使用preparedStatement)

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

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

8、 釋放資源(resultSet、preparedstatement、connection)


jdbc程序

使用jdbc查詢mysql數據庫中用戶表的記錄。

創建java工程,加入jar包:

數據庫驅動包(mysql5.1)


項目結構:



package cn.itcast.mybatis.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 通過單獨的jdbc程序,總結其中的問題
 * 
 * @author xjw
 * @date 2016-02-17
 */
public class JdbcTest {
	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/mybatis?characterEncoding=utf-8",
					"root", "root");
			// 定義sql語句 ?表示佔位符
			String sql = "select * from user where username = ?";
			// 獲取預處理statement
			preparedStatement = connection.prepareStatement(sql);
			// 設置參數,第一個參數爲sql語句中參數的序號(從1開始),第二個參數爲設置的參數值
			preparedStatement.setString(1, "王五");
			// 向數據庫發出sql執行查詢,查詢出結果集
			resultSet = preparedStatement.executeQuery();
			// 遍歷查詢結果集
			while (resultSet.next()) {
				System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 釋放資源
			if (resultSet != null) {
				try {
					resultSet.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (preparedStatement != null) {
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}

	}
}

jdbc問題總結

1、 數據庫鏈接創建、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用數據庫鏈接池可解決此問題。

2、 Sql語句在代碼中硬編碼,造成代碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼。

3、 使用preparedStatement向佔有位符號傳參數存在硬編碼,因爲sql語句的where條件不一定,可能多也可能少,修改sql還要修改代碼,系統不易維護。

4、 對結果集解析存在硬編碼(查詢列名),sql變化導致解析代碼變化,系統不易維護,如果能將數據庫記錄封裝成pojo對象解析比較方便。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章