怎么样实现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();
}
}
}
}
}
以上例子都可以顺利跑通,读者在实验时如果遇到问题,可以给我留言...
本文地址:http://www.45fan.com/a/question/67556.html