准备工作:SQL Server 2005,建表person,含id、name、sex、married列
数据库访问有两种基本的方式,一种就是使用DriverManager,另一种就是DataSource。DriverManager由JDK完全实现的类,需要应用自己加载数据库驱动,自己硬编码数据库url;DataSource是J2EE5.0推荐使用的一种方式,它提供了对目标数据源的一层抽象,使得应用与数据源间完全透明,当然它也需要设置一些连接属性。
下面有一些取得数据库链接的方式例子,包括使用DBCP的数据源和连接池
1.使用JDBC的DriverManager得到数据库链接
public static Connection jdbcGetConnection(){ try { Class.forName(driverName); dbConn = DriverManager.getConnection(dbURL, userName, userPwd); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dbConn; }
2.也可以不使用DriverManager,而是直接取得Driver,通过Driver获取数据库链接
public static Connection msDriverGetConnection(){ Properties prop = new Properties(); prop.put("user", userName); prop.put("password", userPwd); try { Driver d = (Driver) Class.forName(driverName).newInstance(); dbConn = d.connect(dbURL, prop); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dbConn; }
3.使用MS提供的数据源SQLServerDataSource
public static Connection msDatasourceGetConnection(){ SQLServerDataSource ds = new SQLServerDataSource(); ds.setUser(userName); ds.setPassword(userPwd); ds.setServerName("localhost"); ds.setPortNumber(1433); ds.setDatabaseName("HomeWorks"); try { dbConn = ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dbConn; }
4.使用DBCP的数据源,DBCP是Apatch的一个开源项目,提供了数据库链接池的解决方案,里面也提供了最简单的一站式的解决方案
public static Connection dbcpGetConnection(){ BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName(driverName); bds.setUrl(dbURL); bds.setUsername(userName); bds.setPassword(userPwd); try { dbConn = bds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dbConn; }
5.还可以使用数据源连接工厂DataSourceConnectionFactory或驱动连接工厂DriverConnectionFactory、驱动管理器连接工厂DriverManagerConnectionFactory,下面以DriverConnectionFactory举个简单的例子,其他的工厂使用类似
public static Connection dbcpPooledGetConnection(){ Driver driver = null; try { driver = (Driver) Class.forName(driverName).newInstance(); } catch (Throwable t) { String message = "Cannot load JDBC driver class '" + driverName + "'"; t.printStackTrace(); try { throw new SQLNestedException(message, t); } catch (SQLNestedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Properties prop = new Properties(); prop.put("user", userName); prop.put("password", userPwd); DriverConnectionFactory factory = new DriverConnectionFactory(driver, dbURL, prop); try { dbConn = factory.createConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dbConn; }