以下是我的实验目的、思路、步骤。
目的:使用JDNI读取sql数据库表格中的记录。
思路:在同一个java包下创建一个java主类和三个普通类(实现连接数据源操作类,读取查询操作类,关闭资源操作类),预期在配置的conf/context.xml无误和程序无误的情况下应该能实现实验目的。不幸的是运行主类后出现如下错误异常
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
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at test.shujuyuan.getConnection(shujuyuan.java:17)
at test.jdbc.main(jdbc.java:8)
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
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at test.shujuyuan.getConnection(shujuyuan.java:17)
at test.check.show(check.java:17)
at test.jdbc.main(jdbc.java:11)
Exception in thread "main" java.lang.NullPointerException
at test.check.show(check.java:19)
at test.jdbc.main(jdbc.java:11)
源代码附上:
主类:
package test;
public class jdbc {
public static void main(String[] args) {
shujuyuan sjy = new shujuyuan();
sjy.getConnection();// 获取连接
check ch = new check();
ch.show(); // 执行查询
closeresource cr = new closeresource();
cr.close(); // 关闭资源
}
}
连接类:
package test;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class shujuyuan {
Connection con;
public Connection getConnection() {
try {
Context cxt = new InitialContext();
DataSource ds = (DataSource) cxt.lookup("java:comp/env/jdbczjp");
try {
con = ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
// 使用这个类,调用类里面的方法返回一个con连接值
}
查询展示类:
package test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class check {
public void show() {
Statement stmt;// 接口,负责处理sql语句
ResultSet rs;// 结果处理
shujuyuan sjy = new shujuyuan();
Connection con = sjy.getConnection();
try {
stmt = con.createStatement();// 获取connection产生的接口对象
String sql = "select * from ms";// sql选择语句
rs = stmt.executeQuery(sql);// 获取sql语句的处理结果
while (rs.next()) {
int id = rs.getInt("id");
String sname = rs.getString("sname");
int age = rs.getInt("age");
String sex = rs.getString("sex");
int score = rs.getInt("score");
String hobby = rs.getString("hobby");
System.out.println(id + "\t" + sname + "\t" + age + "\t" + sex
+ "\t" + score + "\t" + hobby);
// 处理结果集
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
关闭资源类:
package test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class closeresource {
Statement stmt;// 接口,负责处理sql语句
ResultSet rs;// 结果处理
Connection con;
public void close() {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}