用这个语句:
Class.forName(ClassNameString).newInstance();不过前提是这个类具有一个无参的构造函数,否则结果未知。ClassNameString也必须是包括包名称的全称类名,也必须可以在类路径中可以找到。
Class.forName(ClassNameString).newInstance();不过前提是这个类具有一个无参的构造函数,否则结果未知。ClassNameString也必须是包括包名称的全称类名,也必须可以在类路径中可以找到。
ClassNameString可以指向网络中的某个class吗?
另外,如何才能够正确地调用新实例中的方法?
ClassNameString可以指向网络中的某个class吗?
另外,如何才能够正确地调用新实例中的方法?
我用的是mysql,示例如下:
set CLASSPATH=e:\jdk\lib\Tools.jar;e:\jdk\lib\dt.jar;.;e:\myjsp\server;e:\jakarta-tomcat\lib\servlet.jar;e:\jdk\driver\mysql.jar;数据库连接bean:
package mydb;
import java.sql.*;
public class conn
{
String DBDriver = "org.gjt.mm.mysql.Driver";//数据库驱动
String ConnStr = "jdbc:mysql://localhost:3306/net";//net为数据库名
Connection conn = null;
public conn() {
try
{
Class.forName(DBDriver);
}
catch (java.lang.ClassNotFoundException error)
{
System.err.println(error.getMessage());
}
} public Connection getconn() {
try
{
conn = DriverManager.getConnection(ConnStr,"","");
//用户和口令为空
return conn;
}
catch (SQLException errorc)
{
System.err.println(errorc.getMessage());
return null;
}
} public void close() {
try {
conn.close();
}
catch (SQLException ex) {
System.err.println(ex.getMessage());
}
}
}返回记录集bean
package mydb;
import java.sql.*;
public class result
{
Connection m_conn = null;
Statement m_stmt = null;
ResultSet m_rs = null;
public result() {
} public void setconn(Connection conn) {
m_conn=conn;
try {
m_stmt = m_conn.createStatement();
}
catch (SQLException ex) {
System.err.println("ExecuteQuery: " + ex.getMessage());
}
} public ResultSet executeQuery(String sql) {
try {
m_rs = m_stmt.executeQuery(sql);
}
catch (SQLException ex) {
System.err.println("ExecuteQuery: " + ex.getMessage());
}
return m_rs;
} public void executeUpdate(String sql) {
try {
m_stmt.executeUpdate(sql);
}
catch (SQLException ex) {
System.err.println("ExecuteQuery: " + ex.getMessage());
}
} public void close() {
try {
m_rs.close();
m_stmt.close();
m_conn.close();
}
catch (SQLException ex) {
System.err.println(ex.getMessage());
}
}
}调用示例:
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="conn" class="mydb.conn" scope="page"/>
<jsp:useBean id="result" class="mydb.result" scope="page"/>
<html>
<head><title>Common Database Bean Test</title></head>
<body>
<%
Connection myconn=conn.getconn();
result.setconn(myconn);
ResultSet rs=result.executeQuery("select * from bbs");
while (rs.next()){
out.println("<tr>");
for(int j=1; j<=rs.getMetaData().getColumnCount(); j++){
out.println("<td>"+rs.getObject(j)+"</td>");
}
out.println("</tr>");
}
rs.close();
result.close();
myconn.close();
conn.close();
%>
</body>
</html>hehe,搞了这么多,不知道对你有没有用。
try {
URL[] urlList = {
new URL("http://java.sun.com/share/classes/"),
new URL("http://www.jars.com/jediSearch.zip"),
new URL("http://java.about.com/library/weekly/"),
new File("myJar.jar").toURL()};
ClassLoader loader = new URLClassLoader(urlList);
Class c = loader.loadClass("TheClass");
TheClass tc = (TheClass) c.newInstance();
} catch (MalformedURLException e) {
// load classes another way or display error message
}
import java.sql.*;
public class mydb {
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:sunshine";
Connection conn = null;
ResultSet rs = null;
public mydb() {
try {
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e) {
System.err.println("mydb(): " + e.getMessage());
}
}public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = DriverManager.getConnection(sConnStr);
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage());
}
return rs;
}
}肯定可以的
另外,如果需要记载的某个类的名称事先不知道,
要到运行时才通过查询得知,此时如何确保正确
的加载并实例化呢?兄弟谢了!另,多谢各位大虾的热情帮助,可惜加了几次分
都没成功,faint!!!