JDBC 와 데이터베이스 연결 탱크 에 대해 얼마나 알 고 있 습 니까?
JAVA 데이터베이스 연결 자바 데이터베이스 연결
SUN 회사 가 제공 하 는 데이터베이스 접근 규칙, 규범 은 데이터베이스 종류 가 비교적 많 고 자바 언어 사용 이 광범 위 하기 때문에 sun 회 사 는 규범 을 제공 하여 다른 데이터 베이스 공급 업 체 로 하여 금 기본 적 인 방문 규칙 을 실현 하 게 한다.우리 자바 프로그램 은 sun 회사 가 제공 하 는 jdbc 드라이브 만 사용 하면 됩 니 다.
1.1 JDBC 를 사용 하 는 기본 절차
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
 //   
DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=root");
//   :   +       ,   :   ,   :  。
//   
conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
 //  statement,       ,        
st = conn.createStatement();
 //    ,     
String sql = "select * from stu";
rs = st.executeQuery(sql);
 //         
while (rs.next()) {
	int id = rs.getInt("id");
	String name = rs.getString("name");
	int age = rs.getInt("age");
	System.out.println("id=" + id + "==name==" + name + "==age==" + age);
}
 if (rs != null) {
	try {
		rs.close();
	} catch (SQLException sqlEx) { } // ignore 
	rs = null;
}
...
 DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// Driver            ,       ,              。         。
//       --->     ,   。 java.sql.DriverManager.registerDriver(new Driver());
//           。
Class.forName("com.mysql.jdbc.Driver");	
 driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/student
name=root
password=root
  // JDBC  
public class JDBCUtil {
	static String driverClass = null;
	static String url = null;
	static String name = null;
	static String password= null;
	static {
		try {
			//1.           
			Properties properties = new Properties();
			InputStream is = new FileInputStream("jdbc.properties");
			
			//       ,   src       
			// InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
			//      。
			properties.load(is);
			
			//    
			driverClass = properties.getProperty("driverClass");
			url = properties.getProperty("url");
			name = properties.getProperty("name");
			password = properties.getProperty("password");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	*       
	* @return
	*/
	public static Connection getConn() {
		Connection conn = null;
		try {
			Class.forName(driverClass);
			conn = DriverManager.getConnection(url, name, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	/**
	*     
	* @param conn
	* @param st
	* @param rs
	*/
	public static void release(Connection conn , Statement st , ResultSet rs){
		closeRs(rs);
		closeSt(st);
		closeConn(conn);
	}
	private static void closeRs(ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			rs = null;
		}
	}
	private static void closeSt(Statement st) {
		try {
			if (st != null) {
				st.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			st = null;
		}
	}
	private static void closeConn(Connection conn) {
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			conn = null;
		}
	}
}
     1.3 데이터베이스 의 CRUD
INSERT INTO t_stu (name, age) VALUES ('wangqiang', 28);
INSERT INTO t_stu VALUES (NULL, 'wangqiang2', 28);
   // 1.       
conn = JDBCUtil.getConn();
// 2.       ,  statement
st = conn.createStatement();
// 3.     
String sql = "insert into t_stu values(null , 'aobama' , 59)";
//     ,    0      ,    
int result = st.executeUpdate(sql);
if (result > 0) {
	System.out.println("    ");
} else {
	System.out.println("    ");
}
   DELETE FROM t_stu WHERE id = 6;
   // 1.       
conn = JDBCUtil.getConn();
// 2.       ,  statement
st = conn.createStatement();
// 3.     
String sql = "delete from t_stu where name='aobama'";
//      ,    0      ,    
int result = st.executeUpdate(sql);
if (result > 0) {
	System.out.println("    ");
} else {
	System.out.println("    ");
}
   SELECT * FROM t_stu;
   // 1.       
conn = JDBCUtil.getConn();
// 2.       ,  statement
st = conn.createStatement();
// 3.   sql  ,  ResultSet
String sql = "select * from t_stu";
rs = st.executeQuery(sql);
// 4.      
while (rs.next()) {
	String name = rs.getString("name");
	int age = rs.getInt("age");
	System.out.println(name + "   " + age);
}
   UPDATE t_stu SET age = 38 WHERE id = 1;
   // 1.       
conn = JDBCUtil.getConn();
// 2.       ,  statement
st = conn.createStatement();
// 3.     
String sql = "update t_stu set age = 26 where name ='qyq'";
//      ,    0      ,    
int result = st.executeUpdate(sql);
if (result > 0) {
	System.out.println("    ");
} else {
	System.out.println("    ");
}
   1.4 Dao 모드
Data Access 개체 데이터 액세스 대상
/**
*           
*/
public interface UserDao {
	/**
	*     
	*/
	void findAll();
}
 public class UserDaoImpl implements UserDao{
	@Override
	public void findAll() {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			//1.       
			conn = JDBCUtil.getConn();
			//2.   statement  
			st = conn.createStatement();
			String sql = "select * from t_user";
			rs = st.executeQuery(sql);
			while(rs.next()){
				String userName = rs.getString("username");
				String password = rs.getString("password");
				
				System.out.println(userName+"="+password);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.release(conn, st, rs);
		}
	}
}
 @Test
public void testFindAll(){
	UserDao dao = new UserDaoImpl();
	dao.findAll();
}
 String sql = "select * from t_user where username='"+ username  +"' and password='"+ password +"'";
UserDao dao = new UserDaoImpl();
dao.login("admin", "100234khsdf88' or '1=1"); //         
// SELECT * FROM t_user WHERE username='admin' AND PASSWORD='100234khsdf88' or '1=1' 
//      sql  ,                ,          。          。 
rs = st.executeQuery(sql);
   1.6 PrepareStatement
이 대상 은 앞의 statement 대상 을 교체 하 는 것 입 니 다.
String sql = "insert into t_user values(null , ? , ?)";
ps = conn.prepareStatement(sql);
//              ,1        , 1  。
ps.setString(1, userName);
ps.setString(2, password);
   2 데이터베이스 연결 풀
2.1 사용자 정의 데이터베이스 연결 풀
/*
* 	1.     10   。
* 	2.       getConnection    
* 	3.     ,  addBack    。
* 	4.   。
*/
public class MyDataSource implements DataSource {
	
	List <Connection> list = new ArrayList<Connection>();
	
	public  MyDataSource() {
		for (int i = 0; i < 10; i++) {
			Connection conn = JDBCUtil.getConn();
			list.add(conn);
		}
	}
	
	//                 
	@Override
	public Connection getConnection() throws SQLException {
		//       ,   ,        。
		if(list.size() == 0 ){
			for (int i = 0; i < 5; i++) {
				Connection conn = JDBCUtil.getConn();
				list.add(conn);
			}
		}
		
		//remove(0) --->      。           。           
		Connection conn = list.remove(0);
		return conn;
	}
	/**
	*     ,    。
	* @param conn
	*/
	public void addBack(Connection conn){
		list.add(conn);
	}
	......
}
 UserDao dao = new UserDaoImpl();
dao.insert();
DataSource dataSource = new MyDataSource();
//           addBack  。
   2.2 사용자 정의 데이터베이스 연결 탱크 에 발생 하 는 문 제 를 해결한다.
addBack 방법 이 하나 더 생 겼 기 때문에 이 연결 탱크 를 사용 하 는 곳 은 이 방법 을 추가 로 기억 해 야 하 며 인터페이스 프로 그래 밍 을 할 수 없습니다.
우 리 는 인터페이스 에 있 는 그 close 방법 을 수정 할 계획 이다.원래 의 Connection 대상 의 close 방법 은 정말 연결 을 닫 는 것 입 니 다.이 close 방법 을 수정 하려 고 합 니 다. 나중에 close 를 호출 하려 고 합 니 다. 실제 닫 는 것 이 아니 라 연결 대상 을 돌려 주 는 것 입 니 다.
2.3 어떤 방법 을 어떻게 확장 합 니까?
원래 있 는 방법의 논 리 는 우리 가 원 하 는 것 이 아니다.자기 논 리 를 고치 고 싶 어 요.
3. 오픈 소스 연결 풀
3.1 DBCP
public void testDBCP01() {
	Connection conn = null;
	PreparedStatement ps = null;
	try {
		// 1.        
		BasicDataSource dataSource = new BasicDataSource();
		//            ,          ,   ,  。。
		// jdbc:mysql://localhost/bank    :    ://  /   
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://localhost/bank");
		dataSource.setUsername("root");
		dataSource.setPassword("root");
		
		// 2.       
		conn = dataSource.getConnection();
		String sql = "insert into account values(null , ? , ?)";
		ps = conn.prepareStatement(sql);
		ps.setString(1, "admin");
		ps.setInt(2, 1000);
		ps.executeUpdate();
	} catch (SQLException e) {
		e.printStackTrace();
	} finally {
		JDBCUtil.release(conn, ps);
	}
}
 #     
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/bank
username=root
password=root
#
initialSize=10
#      
maxActive=50
#
maxIdle=20
#
minIdle=5
#
maxWait=60000
#JDBC                        :[   =property;] 
#  :"user"   "password"            ,           。
connectionProperties=useUnicode=true;characterEncoding=gbk
#                 (auto-commit)  。
defaultAutoCommit=true
#driver default                  (TransactionIsolation)。
#        :(    javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
   Connection conn = null;
PreparedStatement ps = null;
try {
	BasicDataSourceFactory factory = new BasicDataSourceFactory();
	Properties properties = new Properties();
	InputStream is = new FileInputStream("src//dbcpconfig.properties");
	properties.load(is);
	DataSource dataSource = factory.createDataSource(properties);
	
	//2.       
	conn = dataSource.getConnection();
	String sql = "insert into account values(null, ? , ?)";
	ps = conn.prepareStatement(sql);
	ps.setString(1, "liangchaowei");
	ps.setInt(2, 100);
	ps.executeUpdate();
	
} catch (Exception e) {
	e.printStackTrace();
} finally {
	JDBCUtil.release(conn, ps);
}
     3.2 C3P0
Connection conn = null;
PreparedStatement ps = null;
try {
	// 1.   datasource
	ComboPooledDataSource dataSource = new ComboPooledDataSource();
	// 2.          
	dataSource.setDriverClass("com.mysql.jdbc.Driver");
	dataSource.setJdbcUrl("jdbc:mysql://localhost/bank");
	dataSource.setUser("root");
	dataSource.setPassword("root");
	
	// 2.       
	conn = dataSource.getConnection();
	String sql = "insert into account values(null , ? , ?)";
	ps = conn.prepareStatement(sql);
	ps.setString(1, "admi234n");
	ps.setInt(2, 103200);
	ps.executeUpdate();
} catch (Exception e) {
	e.printStackTrace();
} finally {
	JDBCUtil.release(conn, ps);
}
 //      xml    default-config   。 
ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 1.          
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost/bank");
dataSource.setUser("root");
dataSource.setPassword("root");
// 2.       
conn = dataSource.getConnection();
String sql = "insert into account values(null , ? , ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, "admi234n");
ps.setInt(2, 103200);
 3.3.1 첨삭
//dbutils         CRUD    ,              。         
QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
//  
queryRunner.update("insert into account values (null , ? , ? )", "aa" ,1000);
//  
queryRunner.update("delete from account where id = ?", 5);
//  
queryRunner.update("update account set money = ? where id = ?", 10000000 , 6);
   3.3.2 조회
QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
Account  account =  queryRunner.query("select * from account where id = ?", new ResultSetHandler<Account>(){
	@Override
	public Account handle(ResultSet rs) throws SQLException {
		Account account  =  new Account();
		while(rs.next()){
			String name = rs.getString("name");
			int money = rs.getInt("money");
			
			account.setName(name);
			account.setMoney(money);
		}
		return account;
	}	
}, 6);
System.out.println(account.toString());
 QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
//      
Account account = queryRunner.query("select * from account where id = ?", new BeanHandler<Account>(Account.class), 8);
 QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
List<Account> list = queryRunner.query("select * from account ",new BeanListHandler<Account>(Account.class));
 //             
BeanHandler,        //                 
BeanListHandler,    //               List
// -------------------------------------------------
ArrayHandler,       //                
ArrayListHandler,   //                 ,          。 
MapHandler,         //              map
MapListHandler,     //                 ,        map。 
   이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.