JDBCの詳細はこれを見れば十分です。(java復習day 12)

34507 ワード

一、JDBC基礎
1、基礎概念:java言語操作データベース(javaデータベース接続)の本質:公式定義のセットはすべての関係型データベースを操作する規則、すなわちインターフェースである。各データベースメーカーはこのインターフェースを実現して、データベース駆動jarパッケージを提供しています。直接にこのインターフェースを使ってプログラムできます。本当に実行されるコードはjarパッケージの実現タイプです。
	public static void main(String[] args) throws Execption{
		//1、    jar 	
		//2、    
		Class.forName("com.mysql.jdbc.Driver");
		//3、         
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","password");
		//4、  sql  
		String sql = "select * from stu";
		//5、    sql   Statement
		Statement stmt = conn.createStatement();
		//6、  sql  
		String result = stmt.excuteUpdate(sql);
		//7、    
		System.out.println(result);
		//8、    
		stmt.close();
		conn.close();
	}
2、JDBC類詳細Driver Manager:駆動管理対象
	/*
		1、    :              jar
		         Drivermanager
		mysql5     jar            
	*/
	
	static void registerDriver(Driver driver)
	//     ,      , com.mysql.jdbc.Driver         
	Class.forName("com.mysql.jdbc.Driver");
	
	/*
		2、       
	*/
	static Connection getConnection(String url,String user,String password)
Connection:データベース接続対象
	/*
		1、  :    sql  
	*/
	Statement createStatement();
	PrepareStatement prepareStatement(String sql);

	/*
		2、    
	*/setAutoCommit(boolean autoCommit)false,     
	    :commit()rollback()
Sttement:sqlを実行する対象
	/*
		1、  sql
	*/
	boolean execute(String sql),       sql

	//   :     ,             DML        (    0,   ;  ,   )
	int executeUpdate(String sql),  DML(insert、update、delete)  ,DDL(create、alter、drop)   

	ResultSet executeQuery(String sql),  DQL(select)  
Result Set:結果セットの対象
	next() //        
	getXxx(  ) //    
	Xxx:        : int getInt(),String getString()int:      , 1getString(1)
		String:        :getDouble("balance")while(rs.next()){
		//    
		int id = rs.getInt(1);
		String name = rs.getString("name");
		double balance = rs.getDouble(3);
		
		System.out.println(id+name+balance);
	}
PreparedStetement:sqlのオブジェクト作用を実行する:SQL注入効率が高いのを防ぐことができます。
	1、SQL    :   sql ,   sql              ,        
	 :       ,abc123     :a' or 'a' = 'a
	sql:select * from user where username = 'abc123' and password = a' or 'a' = 'a;

	2、  sql    :  PrepareStatement     
	3、    SQL:    ?     
	
	4、  :
	    jar 
	
	    
	
	          Connection
	
	  sql
	sql:select * from user where username = ? and password = ?;
	
	 ?  
	  :setXxx(  121:?       1  
	  2:?  
	
	  sql,       ,     sql  

	    
	
	    
3、JDBC制御事務はConnectionオブジェクトを使用して事務のオープンを管理する。トランザクション:set AutoCommt、この方法を呼び出してパラメータをfalseと設定する。即ち、ビジネスをオープンする(sqlを実行する前に事務をオープンする)提出する。commt(すべてのSqlが提出事務を実行する時)ロールバックする。
二、データベース接続池
1、接続池の基礎概念:一つの容器(集合)、データベース接続の容器を保存し、システムが初期化された後、容器が作成され、いくつかの接続対象を申請します。ユーザーがデータベースにアクセスする時、容器から接続先を取得し、ユーザーが訪問した後、接続先を容器に返却します。
実現:標準インターフェース、DataSource
	//  ,    
	geConnection()
	
	//    (             )
	Connection.close()
よくある接続池:C 3 P 0、Druid
C 3 P 0
	  jar c3p0、mchange-commons-java、mysql-connector-java
	
	      :
	  :c3p0.properties   c3p0-config.xml
	  :src   

	           CombopooledDataSource

	     getConnection

	/*
		c3p0  11      
	*/
	public static void main(String[] args) throw SQLException{
		//1、  DataSource
		DataSource ds = new ComboPooledDataSource();
		//2、    
		for(int i = 1; i<= 11; i++){
			Connection conn = ds.getConnection();
			System.out.println(i+":"+conn);

			if(i = 5){
				conn.close(); //          5 ,      ,    
			}
		}
		
	}
ドルイド
	  jar  druid
	
	      (properties  ,        )

	          :        DruidDataSourceFactory

	    :getConnection
	
	/*
  		druid       、      
	*/
	public static void main(String[] args) throw SQLException{
		//1、  jar 
		//2、      
		//3、      
		Properties pro = new Properties();
		InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
		
		//4、       
		DataSource ds  = DruidDateSourceFactory.createDataSource(pro);

		//5、    
		Connection conn = ds.getConnection();
		
		//6、    
		System.out.println(conn);
	}
JDBCUtils工具類を定義する
	      JDBCUtils
	
	           ,        

	    
		1、      :            
		23public static void main(String[] args){
		//1、       DataSource
		private static DataSource ds;

		static{
			try{
				//1、      
				Properties pro = new Properties();
				InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");

				//2、       
				DataSource ds  = DruidDateSourceFactory.createDataSource(pro);
			}catch(IOException e){
				e.printStackTrace();
			}catch(Exception e){
				e.printStackTrace();
			}
		}

		/*
		     
		*/
		public static void getConnection(String[] args) throw SQLException{
			return ds.getConnection();
		}

		/*
			    
		*/
		public static void close(String stmt,Connection conn){
			close(null,stmt,conn);
		}

		public static void close(ResultSet rs, String stmt,Connection conn){
			if{rs!= null{
				try{
					rs.close();
				}catch(SQLException e){
					e.printStackTrace();
			   }
			}


			if{stmt != null{
				try{
					stmt.close();
				}catch(SQLException e){
					e.printStackTrace();
			   }
			}

			if{conn!= null{
				try{
					conn.close();
				}catch(SQLException e){
					e.printStackTrace();
			   }
			}
		}
		
		/*
			        
		*/
		public static DataSource getDataSource(){
			return ds;
		}
	}

三、JDBCTemplate
SpringフレームはJDBCの簡単パッケージに対して、JDBCTemapleオブジェクトを簡単化したJDBCの開発を提供しています。
ステップ:1、jarパッケージを導入する2、jdbcTemplateオブジェクトを作成し、データベースDataSource JdbcTemplate=new JdbcTemplate(ds)に依存する。
3、jdbcTemplateを呼び出す方法でCRUDの操作を完成する。
update():  DML  ,   

//                
queryForMap():           map   
     key,    value,          map  

//           Map  ,  Map     List   
queryForList():           List  

//query    RowMapper,    BeanPropertyRowMapper   ,       JavaBean     
//new BeanPropertyRowMapper(  .class)
query():          javaBean  

//           
queryForMap():             

	/*
		JDBCTemplate    、    
	*/
	
	public static void main(String[] ars){
		//  jar 
		//  JDBCTemplate  
	  JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

		//    
		String sql = "update account set balance = 5000 where id = ?";
		int count = template.update(sql,3);
		System.out.println(count);
	}
	
	/*
		queryForMap()
		queryForList()       
	*/
	public static void main(String[] ars){
		//  jar 
		//  JDBCTemplate  
	   JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

		//    
		String sql = "select * from emp";
		
		List<Map<String,Object>> list = template.queryForList(sql);

		for(Map<String,Object> stringObjectMap : list){
			System.out.println(stringObjectMap);
		}
	}
	
	/*
		query():          javaBean  
	*/
	public static void main(String[] ars){
		//  jar 
		//  JDBCTemplate  
	   JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

		//    
		String sql = "select * from emp";
		
		List<Emp> list = template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));

		for(Emp emp : list){
			System.out.println(emp);
		}
	}