站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题有关连接池的问题!对于连不同的数据库,Context对象内部具体是什么值?

有关连接池的问题!对于连不同的数据库,Context对象内部具体是什么值?

摘要: 有关连接池的问题!对于连不同的数据库,Context对象内部具体是什么值?


有关连接池的问题!对于连不同的数据库,Context对象内部具体是什么值?

比如:
Context cxt =(Context) (new InitialContext()).lookup("java:comp/env");
cxt对象里面具体是什么样子的?
如果我自己写方法创建一个Context对象 如:
Context cxt = SysConfig.getContext();
那我应该在cxt里放进什么?

当然最后得到连接池ds = (DataSource) cxt.lookup(conf.getProperty("jndi"));

我是连MYSQL数据库,大家知道cxt里需要什么吗?
或者提供下MYSQL的连接池方法,因为是自己写的SERVER,所以不能像主流的J2EE应用服务器一样配置,谢谢


没人知道啊?


牛,server都自己写


郁闷了。。那可不可以不通过JNDI找连接池?


Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.mysql.jdbc.jdbc2.optional.MysqlDataSourceFactory");
try {
ctx = new InitialContext(env);//这句报错

.................

}
catch (Exception e) {
System.err.println("ERROR " + e.getMessage());
}
}

错误信息
Cannot instantiate class: com.mysql.jdbc.jdbc2.optional.MysqlDataSourceFactory

对于MYSQL 这个参数Context.INITIAL_CONTEXT_FACTORY应该用什么才对啊?



这个context跟数据库没有关系,是属于jndi技术范围的,他跟只跟你的java server有关系。
你写“com.mysql.jdbc.jdbc2.optional.MysqlDataSourceFactory”肯定是不对的。
一般在同一个服务器内部使用,是不需要制定context参数的
例如
http://www.fixdown.com/article/article/564.htm




谢谢先,但是如果我不指定参数,会报找不到INITIAL_FACTORY的错


javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial


cxt = new InitialContext();
ds = (DataSource) cxt.lookup("java:comp/env/"+SysConfig.getJNDI());

像这样会出以上问题


org.apache.commons.dbcp.BasicDataSource
谁知道含有这个类的包在哪有下载的啊?


我是连MYSQL数据库,大家知道cxt里需要什么吗?
或者提供下MYSQL的连接池方法,因为是自己写的SERVER,所以不能像主流的J2EE应用服务器一样配置,谢谢
---------------------------------------

既然是你自己写的server,ctx里就应该是你的server要求的东西。


终于有人说话了,
我还是Cannot instantiate class: org.apache.commons.dbcp.BasicDataSourceFactory
我都取不到实例,
还是自己写个POOL不用DATASOURCE了


自己UP下


给你个hsqldb的连接池写法,mysql应该也有自己实现了datasource的类

public class Database{
private DataSource ds;
public Database(){
org.hsql.jdbc.jdbcDataSource jds = new org.hsql.jdbc.jdbcDataSource();
jds.setDatabase("jdbc:hsqldb:.");
jds.setUser("sa");
jds.setPassword("");
ds = jds;
}
public boolean execute(String sql) throws Exception{
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
Boolean re = stmt.execute(sql);
stmt.close();
conn.close();
return re;
}
}


或者用

org.apache.commons.dbcp.BasicDataSource

这个在www.apache.org有下载,找common里的dbcp下载


Cannot instantiate class: com.sun.jndi.fscontext.RefFSContextFactory
我都要报类似的错误,是什么原因呢?

org.apache.commons.dbcp这个包我也有下载,但是错误和上面的类似
问下大家知道这个是什么原因不?


找到驱动看了下,是com.mysql.jdbc.jdbc2.optional.MysqlDataSource类

应该是用setUrl(),setUser(),setPassword()这三个方法就可以了,


com.mysql.jdbc.jdbc2.optional.MysqlDataSource
这个我也下载了,但是还是有问题,


测试过了,没有问题!

public class Database {
private static Database instance = new Database();

private DataSource ds;

public Database() {
com.mysql.jdbc.jdbc2.optional.MysqlDataSource mds = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource();
mds.setUrl("jdbc:mysql://localhost/eighthart");
mds.setUser("root");
mds.setPassword("");
ds = mds;
}

public boolean execute(String sql) throws Exception {
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
boolean re = stmt.execute(sql);
stmt.close();
conn.close();

return re;
}

public static void main(String[] args) {

Database db = Database.getInstance();
try {
db.execute("insert into users(id,name,password,posttime) values(3,'dreamover','werwwe','2006-05-06')");
} catch (Exception e) {
e.printStackTrace();
}

}

private static Database getInstance() {

return instance;
}
}


env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");

Context ctx = new InitialContext(env);//是在这句话出错的的。

错误 : Cannot instantiate class: com.sun.jndi.fscontext.RefFSContextFactory


是否你用的服务器没有mysql的DataSource实现?还是的的mysql驱动版本的问题


不弄了,谢谢大家了


↑返回目录
前一篇: jsp读取txt或Excel 文件内容存入SQL2000 数据库中, 从SQL2000 数据库中读取数据到txt或Excel里
后一篇: 600分,关于Sun Message Queue的集群!