写了一个测试数据源连接数据库的java程序,但一直出错,其中数据源是在TOMCATE 5.0中配置的
我在jsp页面中测试是成功的,但使用java程序测试不行
代码如下:import java.sql.*;
import java.sql.Connection;import javax.sql.*;
import javax.naming.*;public class TestConnection {
DataSource ds=null;
public TestConnection() throws NamingException, ClassNotFoundException
{
Context context = new InitialContext();
ds =(DataSource)context.lookup("java:comp/env/jdbc/testSql");
}
public Connection getConnection() throws SQLException
{
return ds.getConnection();
}
public void insertShow() throws SQLException
{
Connection con;
PreparedStatement ps;
con = getConnection();
ps = con.prepareStatement("insert into book(bookName,publisher,price) values (?,?,?)");
ps.setString(1,"wfq1");
ps.setString(2,"publdf");
ps.setString(3,"pricesd");
ps.executeUpdate();
System.out.println("insert OK");
ps.close();
con.close();
}
public static void main(String [] args) throws NamingException
{
TestConnection tc = new TestConnection();
try {
tc.insertShow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
}
}
错误信息如下:Exception in thread "main" javax.naming.NoInitialContextException: Need to speci
fy class name in environment or system property, or as an applet parameter, or i
n an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at TestConnection.main(TestConnection.java:29)请各位指教。
我在jsp页面中测试是成功的,但使用java程序测试不行
代码如下:import java.sql.*;
import java.sql.Connection;import javax.sql.*;
import javax.naming.*;public class TestConnection {
DataSource ds=null;
public TestConnection() throws NamingException, ClassNotFoundException
{
Context context = new InitialContext();
ds =(DataSource)context.lookup("java:comp/env/jdbc/testSql");
}
public Connection getConnection() throws SQLException
{
return ds.getConnection();
}
public void insertShow() throws SQLException
{
Connection con;
PreparedStatement ps;
con = getConnection();
ps = con.prepareStatement("insert into book(bookName,publisher,price) values (?,?,?)");
ps.setString(1,"wfq1");
ps.setString(2,"publdf");
ps.setString(3,"pricesd");
ps.executeUpdate();
System.out.println("insert OK");
ps.close();
con.close();
}
public static void main(String [] args) throws NamingException
{
TestConnection tc = new TestConnection();
try {
tc.insertShow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
}
}
错误信息如下:Exception in thread "main" javax.naming.NoInitialContextException: Need to speci
fy class name in environment or system property, or as an applet parameter, or i
n an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at TestConnection.main(TestConnection.java:29)请各位指教。
你如下的调用时在容器外调用了,所以出错啊
public static void main(String [] args) throws NamingException
{
TestConnection tc = new TestConnection();
try {
tc.insertShow();
} catch (SQLException e) {
e.printStackTrace();
}
} 通过页面访问正确,是因为那时在容器内调用,这是正确的
你要研究一下容器内,容器外的问题