当前页面: 开发资料首页 → 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驱动版本的问题
不弄了,谢谢大家了