JDBC基本使用入門以及工具類

1.JDBC:

1. 概念:Java DataBase Connectivity Java 數據庫連接,Java 語言操作數據庫

	* JDBC本質:其實是官方(sun公司)定義的一套操作所有關係型數據庫的規則,即接口。各個數據庫廠商去實現這套接口,提供數據庫驅動jar包。我們可

		以使用這套接口(JDBC)變成,真正執行的代碼是驅動jar包中的實現類。

2. 入門:MYSQL(數據庫爲例)

	* 步驟:
		1.導入驅動jar包
			* 右鍵項目 --- > Build Path --- >  Configure Build Path... --- > Libraries  ---> Add External JARs...
		2.註冊驅動
			Class.forName("com.mysql.jdbc.Driver");
		3.獲取數據庫連接對象 Connection
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/數據庫名稱" , "用戶名" , "密碼");
		4.定義sql
			String sql = "insert into student values ('張三' , '男' , 18)";
		5.獲取執行sql語句的對象 Statement
			Statement stmt = conn.createStatement();
		6.執行sql , 接受返回結果
			int length = stmt.executeUpdate(sql);
		7.處理結果	
			System.out.println(length);
		8.關閉
			stmt.close();
			conn.close();

	* 注意:如果出現 Could not create connection to database server 異常  這是因爲jar包版本與數據庫不一致造成
		可以將 mysql驅動名改成:com.mysql.cj.jdbc.Driver 
	* 處理如下: 我這裏使用的是	mysql - 8.0.12 版本
	  	
		* Class.forName("com.mysql.cj.jdbc.Driver");
	
		* Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/數據庫名稱?useSSL=false&serverTimezone=UTC" , "用戶名" , "密碼");
			
**3.詳解各個對象:**

	1.DriverManager :驅動管理對象
		* 功能:
		       1.註冊驅動
			static void registerDriver(Driver driver)
			注意:mysql5之後的驅動jar包加載可以省略 
		       2.獲取數據庫連接
			static Connection getConnction(String url , String user , String pwd)
			     * url :
				語法:jdbc:mysql://ip地址 : 端口號/數據庫名稱
				細節:如果ip地址是本機號,端口是3306 則可以簡寫爲 jdbc:mysql:///數據庫名稱
	2.Connection :數據庫連接對象
		1. 功能:
			1.獲取sql 對象
			    * Statement createStatement();
			    * PreparedStatement prepareStatement(String sql);
			2. 管理事務:
			    * 開啓事務:setAutoCommit(Boolean s);
			    * 提交事務:commit();
			    * 回滾事務:rollback();
	3.Statement:執行sql對象
		1. 執行sql語句
			1.boolean execute(String sql) :可以執行任意SQL語句
			2.int executeUpdate(String sql) : 執行DML(insert , update , delete) 語句 DDL(create, alter , drop )語句
			3.ResultSet executeQuery(String sql) :執行DQL語句 (Select)
	4.ResultSet:返回結果集對象
		* next() : 遊標向下移動一行
		* getXxx(參數):獲取數據
		    * Xxx :代表數據類型:int getInt()   , String getString();
		    * 參數:
			1. int : 代表列的編號, 從1開始   getString(1) 獲取第一列的值
			2. String : 代表列名稱 : getDouble("age");
	5.PreparedStatement:執行sql對象	
		1.SQL注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接。會造成安全隱患
			1. 用戶隨便輸入 , 'a' = 'a' 恆等式
			2. sql:select * from T_project where Project_id = '2003-01' and Project_name = '教學大樓' or 'a' = 'a' -- 恆等式存在
		2.解決sql諸如問題:使用 PreparedStatement 對象來解決
		3.預編譯的SQL:參數使用  ?作爲佔位符	
		4.步驟:
			1.導入驅動jar包
				* 右鍵項目 --- > Build Path --- >  Configure Build Path... --- > Libraries  ---> Add External JARs...
			2.註冊驅動
				Class.forName("com.mysql.jdbc.Driver");
			3.獲取數據庫連接對象 Connection
				Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/數據庫名稱" , "用戶名" , "密碼");
			4.定義sql
				String sql = "insert into student values ('?' , '?' , ?)";
			5.獲取執行sql語句的對象 Statement
				PreparedStatement ps= conn.prepareStatement(sql );
			6.執行sql , 接受返回結果
				int length = ps.executeUpdate();
			7.處理結果	
				System.out.println(length);
			8.關閉
				stmt.close();
				conn.close();

2.JDBC控制事務:

1.事務:一個包含多個步驟的業務操作。如果這個業務操作被事務管理,那麼這個業務操作要麼同時成功,要麼同時失敗
2.操作 :
	1.開啓事務
	2.提交事務
	3.回滾事務
3.使用Connection對象來管理事務
	* 開啓事務:setAutoCommit(boolean autoCommit) : 調用該方法設置參數爲false , 即開啓事務
		* 在執行sql之前開啓事務
	* 提交事務:commit()
		* 當所有sql執行完畢之後
	* 回滾事務:rollback();
		* 出現異常時回滾
  • 事務案例:這裏演示最簡便的寫法 以便於理解
Connection conn = null;
		Statement stmt = null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			//3.獲取數據庫連接對象 Connection
			 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=UTC" , "root" , "123456");
			//3.1開啓事務
			conn.setAutoCommit(false);
			//4.定義sql
			String sql = "insert into student values (null ,'張三' , '男' ,'2018-01-02' ,  18 , 'asd')";
			//5.獲取執行sql語句的對象 Statement
			 stmt = conn.createStatement();
			//6.執行sql , 接受返回結果
			int length = stmt.executeUpdate(sql);
			//7.處理結果
			System.out.println(length);
			//8.提交
			conn.commit();
			
		} catch (Exception e) {
			//事務回滾
					if(conn != null)
						try {
							conn.rollback();
						} catch (SQLException e1) {
							e1.printStackTrace();
						}
			e.printStackTrace();
		}finally{
			//9.關閉
			if(stmt != null){
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
		}

3.JDBC工具類:(基於原型)

這裏給出實例代碼:

private static String url ;
		private static String username ;
		private static String password ;
		private static String driver ;
	/**
	 * @param _Project_id
	 * @return
	 */
	static{
			try {
				//讀取 properties
				Properties pro = new Properties();
				//2.加載文件
				//3.加載進內存
				pro.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("db.properties").getPath()));
				//3.獲取值
				url = pro.getProperty("url");
				username = pro.getProperty("username");
				password = pro.getProperty("password");
				driver = pro.getProperty("driver");
				Class.forName(driver);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
	}
		public static Connection getConn() throws SQLException{
			return DriverManager.getConnection(url,username,password);
	}	


db.properties 配置文件如下:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///db1?useSSL=false&serverTimezone=UTC
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
maxIdle=8
minIdle=3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章