怎么样实现DataSourse功能?
javax.sql 包下的接口Interface DataSourse,它是一个数据源,相当于一个工厂,有了DataSourse这个数据源之后,你在程序中就可以连接真正的物理数据库了,每个数据库产商也都提供有相应的DataSourse,每个框架也都提供了相应的DataSourse...
下面介绍几种产商和框架提供获取DataSourse,连接数据库的例子:
1:Spring 的DriverManagerDataSourse 2:jakarta的BsicalDataSourse ,BsicalDataSourseFactory 3:ibatis也有数据源 SimpleDataSourse 4:hibernate 的 DriverManagerConnectionProvider 示例:下面都以连接MySql数据库为例,我的数据库名字是itcast,表名是student.1:用jakarta的 BsicalDataSourse 创建一个DataSourse连接池,连接数据库 package cn.itcast; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource;
public class BasicDataSourseDemo {
public static void main(String[] args) { //获取一个BasicDataSource对象,并设置连接数据库的属性 BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql:///itcast"); bds.setUsername("root"); bds.setPassword("");Connection cn = null;
PreparedStatement pstmt = null; ResultSet rs = null; try { //建立连接 cn = bds.getConnection(); // 显示表student内容 pstmt = cn.prepareStatement("select * from student"); rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("name") + "/t" + rs.getString("salary")); }} catch (Exception e) {
e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); rs = null;} catch (SQLException e) {
e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); pstmt = null; } catch (SQLException e) { e.printStackTrace(); } } if (cn != null) { try { cn.close(); cn = null; } catch (SQLException e) { e.printStackTrace(); } } }}
}//运行上面程序之前你要导入相关jar包如:commons-dbcp-1.2.1.jar,commons-pool-1.3.jar,mysql-connector-java-5.0.3-bin.jar然后建立好mysql数据库,就可以运行了,其实上面那些连接数据库的信息完全可以用Spring 来完成,可以写一个配置文件,这里就不介绍了。
2:用apache的.BasicDataSourceFactory 创建一个数据源连接数据库
package cn.itcast;import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory;public class BasicDataSourseFactoryDemo {
//获取数据库连接信息,返回一个Properties对象 public Properties getProperties() { Properties properties = new Properties(); properties.put("driverClassName", "com.mysql.jdbc.Driver"); properties.put("url", "jdbc:mysql:///itcast"); properties.put("username", "root"); properties.put("password", ""); return properties; } //数据库操作,用BasicDataSourceFactory来建立一个dataSourse public void dbOperater() { DataSource dataSourse = null; Connection cn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { dataSourse = BasicDataSourceFactory.createDataSource(getProperties());//调用getProperties()获得一个Properties对象 cn = dataSourse.getConnection(); //显示表student内容 pstmt = cn.prepareStatement("select * from student"); rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("name") + "/t" + rs.getString("salary")); }} catch (Exception e) {
e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); rs = null;} catch (SQLException e) {
e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); pstmt = null; } catch (SQLException e) { e.printStackTrace(); } } if (cn != null) { try { cn.close(); cn = null; } catch (SQLException e) { e.printStackTrace(); } } } } // public static void main(String[] args) { BasicDataSourseFactoryDemo basicDataSourseFactoryDemo = new BasicDataSourseFactoryDemo(); basicDataSourseFactoryDemo.dbOperater();//调用dbOperater()方法,对数据库操作 } }3:ibatis也有数据源 SimpleDataSourse
运行下面这个程序之前先加入相应的jar包mysql-connector-java-5.0.3-bin.jar,ibatis-common-2.jar commons-dbcp-1.2.1.jar,commons-pool-1.3.jar package cn.itcast;import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties;import com.ibatis.common.jdbc.SimpleDataSource;
public class SimpleDataSourceDemo {
public static void main(String[] args) {
Properties props = new Properties(); props.put("JDBC.Driver", "com.mysql.jdbc.Driver"); props.put("JDBC.ConnectionURL", "jdbc:mysql://localhost/itcast"); props.put("JDBC.Username", "root"); props.put("JDBC.Password", "");Connection conn = null;
PreparedStatement pstmt = null; ResultSet rs = null; SimpleDataSource simpleDS = null;try {
// SimpleDataSource创建一个数据源 simpleDS = new SimpleDataSource(props); conn = simpleDS.getConnection(); conn.setAutoCommit(false); pstmt = conn.prepareStatement("select * from student");rs = pstmt.executeQuery();
while (rs.next()) { System.out.println(rs.getString("name") + "/t" + rs.getString("salary")); }} catch (Exception e) {
e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } if (rs != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }}
//同样运行上面程序之前你要导入相关jar包如:commons-dbcp-1.2.1.jar,commons-pool-1.3.jar,mysql-connector-java-5.0.3-bin.jar然后建立好mysql数据库,就可以运行了。
4:用hibernate 的 DriverManagerConnectionProvider
package cn.itcast;import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties;import org.hibernate.cfg.Environment;
import org.hibernate.connection.DriverManagerConnectionProvider;public class DriverManagerConnectionProviderDemo {
public static void main(String[] args) throws Exception {
DriverManagerConnectionProvider dmcp = new DriverManagerConnectionProvider();
Properties props = new Properties(); // 下面这两种形式都可以 props.setProperty(Environment.DRIVER, "com.mysql.jdbc.Driver"); props.setProperty(Environment.URL, "jdbc:mysql:///itcast"); props.setProperty("hibernate.connection.username", "root"); props.setProperty("hibernate.connection.password", ""); // 调用configure()方法获取一个Properties对象,Initialize the connection provider // from given properties. dmcp.configure(props); Connection cn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 显示表student内容 cn = dmcp.getConnection(); pstmt = cn.prepareStatement("select * from student"); rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("name") + "/t" + rs.getString("salary")); }} catch (Exception e) {
e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); rs = null;} catch (SQLException e) {
e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); pstmt = null; } catch (SQLException e) { e.printStackTrace(); } } if (cn != null) { try { cn.close(); cn = null; } catch (SQLException e) { e.printStackTrace(); } } }}
}
以上例子都可以顺利跑通,读者在实验时如果遇到问题,可以给我留言...