如何创建 DataSource

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建 DataSource相关的知识,希望对你有一定的参考价值。

  先看看JDK中对DataSource的描述:
  作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。
  基本实现 - 生成标准的 Connection 对象
  连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。
  简单来说,就是获取数据库连接的一个通用接口, 常见的dbcp,c3p0,druid,bonecp都是DataSource的实现.

  NutDao也选用DataSource作为获取数据库连接的方式, 且只调用其无参数的getConnection()方法, 也是大部分数据库连接池唯一支持的方法.

  这篇文档该怎么用?
  直接书写 Java 代码
  如果你只是在main方法中尝试一下NutDao的功能,那么请选取Java
  通过 Nutz.Ioc 的 JSON 配置文件
  Nutz项目中最常见的配置方式, 由NutIoc来管理DataSource和NutDao实例
  特别强调, NutDao与NutIoc没有任何依赖关系, NutDao在NutIoc看来,只是普通的bean
  通过 Nutz.Ioc 的 XML 配置文件
  满足XML强迫症的程序猿, 功能与JSON配置文件类似
  再特别特别强调
  NutDao几乎不需要任何配置文件(只有一个nutz_jdbc_experts.js 绝大部分时间你不会遇到它!)
  本文说到的js/xml文件,都是NutIoc的文件,不是NutDao的配置文件!!
  不要重复创建DataSource,不要重复创建NutDao!!!!!!!
  务必参考本小节末尾的提醒!!

  内置的SimpleDataSource
  Nutz内置,非常适合新手!!无需额外下载其他连接池,方便尝试NutDao的功能.
  不要生产环境中使用这个DataSource!!
  不要用它来测试NutDao的性能!!
  自动加载NutDao所支持的数据库的驱动(说白了就是我们认识那几款,不就Class.forName一下嘛)
  无额外依赖,适合新手试用
  非连接池,配置简单
  1.b.43开始提供,旧版本的Nutz可通过拷贝源文件的方式添加这个类
  SimpleDataSource: 直接书写 Java 代码
  import org.nutz.dao.impl.SimpleDataSource;

  ...

  SimpleDataSource ds = new SimpleDataSource();
  //ds.setDriverClassName("org.postgresql.Driver"); //默认加载了大部分数据库的驱动!!
  ds.setJdbcUrl("jdbc:postgresql://localhost:5432/mydatabase");
  ds.setUsername("demo");
  ds.setPassword("123456");
  ...
  //ds.close(); // 这个DataSource不是一个连接池,所以关不关都行
  SimpleDataSource: 通过 Nutz.Ioc 的 JSON 配置文件
  
  dataSource :
  type : "org.nutz.dao.impl.SimpleDataSource",
  fields :
  jdbcUrl : \'jdbc:postgresql://localhost:5432/mydatabase\',
  username : \'demo\',
  password : \'123456\'
  
  
  
  SimpleDataSource: 通过 Nutz.Ioc 的 XML 配置文件
  <ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd">
  <obj name="dataSource" type="org.nutz.dao.impl.SimpleDataSource">
  <field name="jdbcUrl"><str>jdbc:postgresql://localhost:5432/mydatabase</str></field>
  <field name="username"><str>demo</str></field>
  <field name="password"><str>123456</str></field>
  </obj>
  </ioc>
  附送一个完整的NutDao配置js文件
  var ioc =
  dao :
  type : "org.nutz.dao.impl.NutDao",
  args : [refer:"dataSource"]
  ,
  dataSource :
  type : "org.nutz.dao.impl.SimpleDataSource",
  fields :
  jdbcUrl : \'jdbc:postgresql://localhost:5432/mydatabase\',
  username : \'demo\',
  password : \'123456\'
  
  
  
  如何使用这些配置? 请看文章末尾.

  Druid
  国产精品连接池,淘宝温少诚意出品,带强大的监控功能哦

  druid : 直接书写 Java 代码
  import com.alibaba.druid.pool.DruidDataSource;

  ...

  DruidDataSource dds = new DruidDataSource();
  dds.setDriverClassName("org.postgresql.Driver");
  dds.setUrl("jdbc:postgresql://localhost:5432/mydatabase");
  dds.setUsername("enzozhong");
  dds.setPassword("123");
  ...
  dds.close(); // 关闭池内所有连接
  druid : 通过 Nutz.Ioc 的 JSON 配置文件
  
  dataSource :
  type : "com.alibaba.druid.pool.DruidDataSource",
  events :
  depose : \'close\'
  ,
  fields :
  driverClassName : "org.postgresql.Driver",
  url : "jdbc:postgresql://localhost:5432/mydatabase",
  username : "enzozhong",
  password : "123"
  
  
  
  druid: 通过 Nutz.Ioc 的 XML 配置文件
  <ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd">
  <obj name="dataSource" type="com.alibaba.druid.pool.DruidDataSource">
  <events>
  <depose>close</depose>
  </events>
  <field name="driverClassName"><str>org.postgresql.Driver</str></field>
  <field name="url"><str>jdbc:postgresql://localhost:5432/mydatabase</str></field>
  <field name="username"><str>enzozhong</str></field>
  <field name="password"><str>123</str></field>
  </obj>
  </ioc>
  注册了 depose 事件,当整个 Ioc 容器注销时,将 真正 关闭所有池内连接
  更多配置

  Apache Tomcat 7 连接池
  这里使用的是tomcat7新的自带连接,但是,请把其2个jar移到项目的lib中!!

  直接书写 Java 代码
  import org.apache.tomcat.jdbc.pool.DataSource;

  ...

  DataSource ds = new DataSource();
  ds.setDriverClassName("org.postgresql.Driver");
  ds.setUrl("jdbc:postgresql://localhost:5432/mydatabase");
  ds.setUsername("demo");
  ds.setPassword("123456");
  ...
  ds.close(); // 关闭池内所有连接
  通过 Nutz.Ioc 的 JSON 配置文件
  
  dataSource :
  type : "org.apache.tomcat.jdbc.pool.DataSource",
  events :
  depose : \'close\'
  ,
  fields :
  driverClassName : \'org.postgresql.Driver\',
  url : \'jdbc:postgresql://localhost:5432/mydatabase\',
  username : \'demo\',
  password : \'123456\'
  
  
  
  通过 Nutz.Ioc 的 XML 配置文件
  <ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd">
  <obj name="dataSource" type="org.apache.tomcat.jdbc.pool.DataSource">
  <events>
  <depose>close</depose>
  </events>
  <field name="driverClassName"><str>org.postgresql.Driver</str></field>
  <field name="url"><str>jdbc:postgresql://localhost:5432/mydatabase</str></field>
  <field name="username"><str>demo</str></field>
  <field name="password"><str>123456</str></field>
  </obj>
  </ioc>
  注册了 depose 事件,当整个 Ioc 容器注销时,将 真正 关闭所有池内连接
  关于 depose 事件,更多详情请参看 事件监听

  Apache DBCP
  dbcp: 直接书写 Java 代码
  import org.apache.commons.dbcp.BasicDataSource;

  ...

  BasicDataSource ds = new BasicDataSource();
  ds.setDriverClassName("org.postgresql.Driver");
  ds.setUrl("jdbc:postgresql://localhost:5432/mydatabase");
  ds.setUsername("demo");
  ds.setPassword("123456");
  ...
  ds.close(); // 关闭池内所有连接
  dbcp: 通过 Nutz.Ioc 的 JSON 配置文件
  
  dataSource :
  type : "org.apache.commons.dbcp.BasicDataSource",
  events :
  depose : \'close\'
  ,
  fields :
  driverClassName : \'org.postgresql.Driver\',
  url : \'jdbc:postgresql://localhost:5432/mydatabase\',
  username : \'demo\',
  password : \'123456\'
  
  
  
  dbcp: 通过 Nutz.Ioc 的 XML 配置文件
  <ioc xsi:noNamespaceSchemaLocation="nutz-ioc-0.1.xsd">
  <obj name="dataSource" type="org.apache.commons.dbcp.BasicDataSource">
  <events>
  <depose>close</depose>
  </events>
  <field name="driverClassName"><str>org.postgresql.Driver</str></field>
  <field name="url"><str>jdbc:postgresql://localhost:5432/mydatabase</str></field>
  <field name="username"><str>demo</str></field>
  <field name="password"><str>123456</str></field>
  </obj>
  </ioc>
参考技术A sql也安装就行了
我这里给一些吧,不懂发信息给我.
一、环境准备:
1、Web应用程序的运行环境:JDK
1、安装jdk-6-windows-i586.exe,使用默认设置,直到安装完成。
2、右击我的电脑-->属性-->高级-->环境变量-->系统用户中:
1>新建键名:JAVA_HOME 值:C:\Program Files\Java\jdk1.6.0 (JDK所在目录)。
2>修改path 在其值后加: ;%JAVA_HOME%\bin; (注意分号)。
3>新建键名:ClassPath (大小写均可) 值: %JAVA_HOME%\lib; (还可其它,注意分号)。
2、网络服务器:Tomcat WebLogic JBoss Resin
1、Tomcat5.5.26
1>安装apache-tomcat-5.5.26.exe基本使用默认设置,直到完成。
2>解压apache-tomcat-5.5.26-admin.zip覆盖到apache目录下,启动服务。
3>在浏览器中输入: 显示Tomcat的页面则安装成功。
2、Tomcat5.5.26连接池的配置
1>打开conf\server.Xml
2>在</host>前加入:
<Context path="/01" docBase="01" debug="5" reloadable="true" corssContext="true">
<Resource name="jdbc/pool" auth="Container" type="javax.sql.DataSource" maxActive="20" maxIdle="30" maxWait="10000" username="sa" password="" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_JSDQ02 />
</Context>
后重启Tomcat即可
3、开发工具:Eclipse(MyEclipse) Dreamweaver JBuilder
1、Eclipse 插件安装:
1>复制法:直接将解压后features和plugins目录下的文件复制到eclipse目录下的相应文件夹即可。
2>连接法:1>>在eclipse目录下建tools文件夹(可以为其它路径和名称)将解压后的插件复制进去。插件目录结构应为:插件名/eclipse/features、plugins。
2>>在eclipse目录下建links文件夹(不可更改),后在其下建一个link文件如:n1.Link打开编辑如下:path=tools/插件名 。保存启动eclipse即可。
4、数据库:SQL Server 2000 mysql Access Oracle SQL Server 2005
1、SQL Server 2000:
1>安装SQL Server 2000简体中文个人版
2>安装SQL Server pack SP4补丁以及
3>创建数据库和表,从外部附加数据库

如何使用 context.bind 绑定 DataSource。连接池等

【中文标题】如何使用 context.bind 绑定 DataSource。连接池等【英文标题】:How to bind DataSource using context.bind. Connection pooling etc 【发布时间】:2011-08-13 14:32:18 【问题描述】:

我在 NetBean 7.0 中创建了一个简单的 java 项目,并添加了 jar 文件 sqljdbc4.jar 以支持 MS SQl。

我创建了一个类,其中我为 MQ SQL 创建了一个数据源(代码如下)。 它使用数据源连接数据库并成功获取记录数(504)。 (我有一个包含 504 条记录的 Product 表)

但是在尝试绑定到 Context 时会抛出错误。有人可以帮我建议我应该输入什么来填写“???”在下面的代码中?

package datasourcetest; 

import javax.naming.InitialContext;

import javax.naming.Context;

import javax.naming.NamingException;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

import java.sql.*; 

import java.util.Hashtable; 

/** 
* 
* @author admin 
*/ 



public class dataSource  

public static void main(String [] args) 
 

SQLServerDataSource ds = new SQLServerDataSource(); 

ds.setServerName("admin-PC\\SQLEXPRESS"); 

ds.setPortNumber(1433); 

ds.setUser("sa"); 

ds.setPassword("admin"); 

try 

System.out.println("PART 1"); 

Connection con = ds.getConnection(); 

if(con !=null) 

 

System.out.println("Connection Success"); 

 

Statement stmt = con.createStatement(); 

ResultSet rs = stmt.executeQuery("select count(*) from AdventureWorks.Production.Product") ; 

while(rs.next())  

int count = rs.getInt(1); 

System.out.println("Total Record: "+ count); 

 

/* Bind the DataSource to JNDI so that we can look for the datasource by the name given**/ 

System.out.println("PART 2"); 

Hashtable env = new Hashtable(); 

env.put(Context.INITIAL_CONTEXT_FACTORY," ??? "); 

env.put(Context.PROVIDER_URL, " ??? "); 

Context ctx = new InitialContext(env); 

ctx.bind("jdbc/myDatasource",ds); 

SQLServerDataSource myDs = (SQLServerDataSource)ctx.lookup("jdbc/myDatasource"); 

 

catch(SQLException se)  

System.out.println("Failed PART 1"); 

 

catch(NamingException ne)  

System.out.println("Failed PART 2"); 

ne.printStackTrace(); 

 

 

 

【问题讨论】:

【参考方案1】:

查看“连接到数据源”:

http://download.oracle.com/javase/1.4.2/docs/guide/jdbc/getstart/datasource.html

【讨论】:

谢谢 - 该链接提供信息,但没有说明 INITIAL_CONTEXT_FACTORY 和 PROVIDER_URL 的值。它抛出错误:javax.naming.NoInitialContextException:无法实例化类:???? [根异常是 java.lang.ClassNotFoundException: ???? ] 这个问题有什么解决办法吗?

以上是关于如何创建 DataSource的主要内容,如果未能解决你的问题,请参考以下文章

spring

javamail发送二进制流附件的问题

在tomcat中绑定JNDI数据源?

java的反射

SPRING 动态注册BEAN

SPRING 动态注册BEAN