使用BasicDataResource来连接数据库,平时我们都是直接使用Driver,这里我们自己通过编写程序获得一个数据源,并从数据源连接到数据库获得数据。通过数据源的学习对于数据库连接的底层的东西可以有个新的认识。
准备工作:
1. Eclipse
2.MySql 和 Mysql 连接驱动(mysql-connection-java-5.0.3-bin.jar)
3.下载commons-pool-1.3.jar包 和commons-dbcp-1.2.1.jar包
工作流程:
一.数据库MySql
1. 打开MySql 服务器,在MySql服务器里建立一个名叫itcast库。
2. 在库里创建一个名叫student的表,在表里设置一个name和password.。
3. 在表中增加name=huangzongda,password=itcast
二.Eclipse
1.打开Eclipse工具,建立一个itcast包,包下面建立一个测试名叫DbDemo类。
2.导入mysql-connection-java-5.0.3-bin.jar和commons-pool-1.3.jar, commons-dbcp-1.2.1.jar三个包
3.代码比较简单,可是涉及到的面比较广,细心是必须的。
//包名
package itcast;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.apache.commons.dbcp.BasicDataSource;
public class DCDemo {
/**
* @param args
* @throws SQLException
*/
static Connection cn = null;
static PreparedStatement stmt = null;
static ResultSet rs = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
//BasicDataSource数据源对象,用来设置Driver,url,user,password
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
//localhost代表使用本地数据库,如果使用其他计算机上的库可以加上IP和端口号:162.105.*+端口号
ds.setUrl("jdbc:mysql://localhost/itcast");
ds.setUsername("root");
ds.setPassword("");
try
{
获得连接
cn = ds.getConnection();
//查询表
stmt = cn.prepareStatement("select * from student");
rs = stmt.executeQuery();
while(rs.next())
{
System.out.println(rs.getString("name")+":"+rs.getString(2));
}
}
catch(Exception e)
{
e.printStackTrace();//在实际上应该使用log打印,由于是课堂时间有限没有花太多时间配置log
}
finally
{
//关闭不使用的资源,关闭的顺序是倒着来的rs,stmt,cn,关闭之后应该设置为null这样释放就更放心了。
if(rs != null)
try
{
rs.close();
rs=null;
}
catch(Exception e){e.printStackTrace();}
if(stmt != null)
try
{
stmt.close();
stmt=null;
}
catch(Exception e){e.printStackTrace();}
if(cn != null)
try
{
cn.close();
cn=null;
}
catch(Exception e){e.printStackTrace();}
}
}
}
打印结果:
Huangzongda:itcast
下面在上面的程序基础上,用Spring实现同样的例子:
准备工作:
1. Eclipse
2. Spring
3.MySql 和 Mysql 连接驱动(mysql-connection-java-5.0.3-bin.jar)
4.下载commons-pool-1.3.jar包 和commons-dbcp-1.2.1.jar包
5.在上面的基础上还需要log4j-1.2.9.jar包,Spring 1.2 Core Libraries包和commons-pool-1.3.jar包
6包确实多,开始程序老是冒错,都有点犯晕,结果出来后会感到苦尽甘来的
步骤:
1. 编写DCDemo类
2. 编写ApplicationContext.xml文件
3. Mysql服务器启动,这里将使用上面已经建好叫ITCAST的库。
//DCDemo类
package itcast;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
//导入包,这里就不多说了,因为都是Eclipse可以帮你引入,按快捷键Ctrl+Shift+o,不是数字”0”。
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DCDemo {
/**
* @param args
* @throws SQLException
*/
public Connection cn = null;
public PreparedStatement stmt = null;
public ResultSet rs = null;
public DataSource ds = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
/*BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost/itcast");
ds.setUsername("root");
ds.setPassword("");*/
//ApplicationContext获得xml资源路径
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过bean的id(mybean)获得ApplicationContext.xml里面的属性
DCDemo demo = (DCDemo)context.getBean("mybean");
demo.getAll();
}
public void setDataSource(DataSource ds)
{
this.ds = ds;
}
public void getAll()
{
try
{
// 获得数据库连接
cn = ds.getConnection();
//从数据库里查询信息
stmt = cn.prepareStatement("select * from student");
rs = stmt.executeQuery();
while(rs.next())
{
//打印信息
System.out.println(rs.getString("name")+":"+rs.getString(2));
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
//释放资源
if(rs != null)
try
{
rs.close();
rs=null;
}
catch(Exception e){e.printStackTrace();}
if(stmt != null)
try
{
stmt.close();
stmt=null;
}
catch(Exception e){e.printStackTrace();}
if(cn != null)
try
{
cn.close();
cn=null;
}
catch(Exception e){e.printStackTrace();}
}
}
}
ApplicationContext.xml文件:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
beans
PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
<
beans
>
//id
将会被
JAVA
代码
<
bean
id
=
"mybean"
class
=
"itcast.DCDemo"
>
<
property
name
=
"dataSource"
>
<
ref
bean
=
"dst"
/>
</
property
>
</
bean
>
//
使用
BasicDataSource
里面提供了获得
Driver,url,username
的属性。下面属性的名字
driverClassName,url
都必须是
BasicDataSource
提供的方法保持一致
<
bean
id
=
"dst"
class
=
"org.apache.commons.dbcp.BasicDataSource"
>
//
获得数据库的驱动
Driver,
通过名
driverClassName
取得资源
com.mysql.jdbc.Driver
<
property
name
=
"driverClassName"
>
<
value
>
com.mysql.jdbc.Driver
</
value
>
</
property
>
//
获得连接数据的路径
url,
值是
jdbc:mysql://localhost/itcast
<
property
name
=
"url"
>
<
value
>
jdbc:mysql://localhost/itcast
</
value
>
</
property
>
//
获得数据库连接的用户名
root
<
property
name
=
"username"
>
<
value
>
root
</
value
>
</
property
>
//
由于
Mysql
数据库没设置密码,下面将没有它的配置
</
bean
>
下面还是一个
XML
获得数据源的程序
:
除了上面的方式外也可以使用IBATIS来获得自己的数据源。在这里没有改变JAVA代码,也就是说只是修改了XML中的代码,得到的结果还是一样的。这里的还是使用上面所写的DCDemo.java
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
beans
PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
<
beans
>
<
bean
id
=
"mybean"
class
=
"itcast.DCDemo"
>
<
property
name
=
"dataSource"
>
<
ref
bean
=
"dst"
/>
</
property
>
</
bean
>
<
bean
id
=
"dst"
class
=
"com.ibatis.common.jdbc.SimpleDataSource"
>
<
constructor-arg
>
<
props
>
<
prop
key
=
"JDBC.Driver"
>
com.mysql.jdbc.Driver1
</
prop
>
<
prop
key
=
"JDBC.ConnectionURL"
>
jdbc:mysql://localhost/itcast
</
prop
>
<
prop
key
=
"JDBC.Username"
>
root
</
prop
>
<
prop
key
=
"JDBC.Password"
></
prop
>
</
props
>
</
constructor-arg
>
</
bean
>
运行结果:
Huangzongda:huang