我用JAVA连接ORACLE数据库,但是出现问题了,提示:
Exception in thread "main" java.lang.NoClassDefFoundError: JDBCConn
我的源程序如下:
import java.sql.*;public class JDBCConn
{
private static String url="";
private static String username="";
private static String password="";

private Connection conn()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(url,username,password);
return con;
}
catch(ClassNotFoundException cnf)
{
System.out.println("driver not find:"+cnf);
return null;
}
catch(SQLException sqle)
{
System.out.println("can't connection db:"+sqle);
return null;
}
catch(Exception e)
{
System.out.println("failed to load JDBC driver.");
return null;
}
} public void query(Connection con,String sql)
{
try
{
if(con==null)throw new Exception("datebase connection can't use!");
if(sql==null)throw new Exception("check your parameter:'sql'! don't input null!");
Statement stmt =con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
ResultSetMetaData rmeta=rs.getMetaData();
int numColumns=rmeta.getColumnCount();
while(rs.next())
{
for(int i=0;i<numColumns;i++)
{
String sTemp=rs.getString(i+1);
System.out.println(sTemp+"");
}
System.out.println("");
}
}
catch(Exception e)
{
System.out.println("query error:"+e);
}
}

public void execute(Connection con,String sql)
{
try
{
if(con==null)return;
Statement stmt =con.createStatement();
stmt.executeUpdate(sql);
}
catch(Exception e)
{
System.out.println("execute error:sql="+sql);
System.out.println(e);
}
} public void demo()
{
try
{
JDBCConn oc=new JDBCConn();
Connection conn=oc.conn();
String sql="insert into TBL_USER(id,name,password) values (seq_user.nextval,'switch','haorenpingan')";
oc.execute(conn,sql);
sql="select * from TBL_USER";
oc.query(conn,sql);
conn.close();
}
catch(SQLException se)
{
System.out.println(se);
}
catch(Exception e)
{
System.out.println(e);
}
}

public static void main(String[] arg)
{
if(arg.length!=3)
{
System.out.println("use :java JDBCConn url username password");
return;
}
JDBCConn oc=new JDBCConn();
oc.url=arg[0];
oc.username=arg[1];
oc.password=arg[2];
oc.demo();
}
}在运行时我输入:
java JDBCConn jdbc:oracle:thin:@127.0.0.1:1521:MISDB scott tiger
得到刚才的提示的,还想请问下,我的JDBC驱动就是oracle10g安装程序下的...\OraHome_1\jdbc\lib\classes12.zip 环境变量classpath是在命令行窗口用set设置的(不知道为什么,直接在我的电脑—>属性->高级->环境变量里面不能设置),这个没问题吧?我是新手,请各位高手在解答问题时详细点(包括我说的环境变量设置的这个小问题),不甚感激!

解决方案 »

  1.   

    我在网上找到的这个例子:
     import   java.sql.*;   
      public   class   tt   
      {   
      public   static   void   main(String[]   args)   
              {   
              try     
              {   
              Class.forName("oracle.jdbc.driver.OracleDriver");   
      Connection   conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:MISDB",   
      "scott","tiger");   
      Statement   stmt=conn.createStatement();   
      ResultSet   rs=stmt.executeQuery("select   *   from   emp");   
      while(rs.next())   
      {   
      //int   i=rs.getInt("id");   
      //System.out.println   (i);   
      //System.out.println   (rs.getString("userid"));   
      System.out.println   (rs.getString(2));   
      }   
      conn.close();   
              }   
              catch   (Exception   ex)     
              {   
                
              }   
              }   
      }  
    运行后的结果和我的程序结果一样,都是出现:
    Exception in thread "main" java.lang.NoClassDefFoundError: classname
    在线等,谢谢!
      

  2.   

    刚开始运行的时候好象就是说驱动没找到(JDBC的),后来在命令行下把环境变量设置好后就提示的是这个。
    楼上的能说明白点吗?
      

  3.   

    在没有用set classpath=...\OraHome_1\jdbc\lib\classes12.zip设置环境变量的时候,出现的提示是这样的:can't connection db:java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
    query error:java.lang.Exception: datebase connection can't use!
    java.lang.NullPointerException
    设置了以后就是:Exception in thread "main" java.lang.NoClassDefFoundError: JDBCConn
    怎么回事额?
      

  4.   

    classes12.zip没有导入 将classes12.zip放到 webapp\WEB-INF\lib下就可以了不用设置环境变量 DriverManager.registerDriver(
          new oracle.jdbc.OracleDriver()
        );
        Connection myConnection = DriverManager.getConnection(
            "jdbc:oracle:thin:@127.0.0.1:1521:dbName","system", "123456")
      

  5.   

    webapp\WEB-INF\lib在哪?
    我觉得是不是环境变量设置有问题啊?因为没有set classpath=...\OraHome_1\jdbc\lib\classes12.zip设置环境变量的时候和设置后的问题是不一样的
    而网上关于java.lang.NoClassDefFoundError这个异常都是纯JAVA的,和数据库无关的,55555555555555,怎么弄啊?!………………
      

  6.   

    can't connection db:java.sql.SQLException: Io 异常
    这个要查查看你的数据库是否能访问,试试用客户端工具或者telnet看能否连接
    java.lang.NoClassDefFoundError
    这个是没有找到你的数据库驱动类.要把class12加入到你的类路径下.
    你这个不是web项目,没有webapp\WEB-INF\lib这个目录;运行时可以用-classpath来添加类路径
      

  7.   

    要把class12加入到你的类路径下.你说的是把这个文件和要运行的类放在同一目录下吗?
    谁知道的有没QQ啊?留下来,我请教你们啊。
      

  8.   

    你将你的class12.zip copy到你的jdk安装目录下的lib里面看看.然后环境变量中加入C:\j2sdk1.4.2_02\这个是你的jdk的安装路径,根据你自己的路径设置.
    lib\classes12.zip
      

  9.   

    好象不行
    如果在命令行里面输入set classpath=...
    是不是把以前设置的环境变量都覆盖了?添加怎么弄?重新启动后还能管用吗?设置环境变量都是设置系统的环境变量吗?具体怎么弄,如果有多个环境变量要设置的话,中间用什么隔开?
    我用的是oracle数据库和java,就这两要设置环境变量的,怎么弄?
      

  10.   

    我环境变量是这么设置的,你可以参考一下
    classpath: 
    .;C:\j2sdk1.4.2_02\lib\tools.jar;C:\j2sdk1.4.2_02\lib\dt.jar;C:\j2sdk1.4.2_02\lib\classes12.jar
    JAVA_HOME: 
    C:\j2sdk1.4.2_02
    PATH:
    D:\oracle\ora92\bin;C:\j2sdk1.4.2_02\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%PATH%;%ANT_HOME%\bin
      

  11.   

    我参考你的弄了,还是不行额,崩溃了~!~
    是不是我这个不行啊?java JDBCConn jdbc:oracle:thin:@127.0.0.1:1521:MISDB scott tiger
      

  12.   

    弄了半天,我用这个程序:
    import java.sql.*;
    import java.util.*;
    import java.awt.*;
    public class JDBCFile
    {
    public static void main(String[] args)

                 
    Connection conn;
    try
    {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    }
    catch(Exception e)
    {
    System.out.println("33333333333333333333333333");
    }
    try
    { conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:MISDB","system","123456789");
    System.out.println("11111111111111111");
    }
    catch(SQLException e)
    {
    System.out.println("2222222222222222222222222222");
    }

    }
    }
    测试输出111111111111111111111,也就是能找到驱动,能连接数据库,但是现在情况又变了,我原来的程序输出的是:
    can't connection db:java.sql.SQLException: No suitable driver
    query error:java.lang.Exception: datebase connection can't use!
    java.lang.NullPointerException数据库MISDB是新建的,里面没有表空间也没有表和任何数据,不知道和这个有没有关系。
      

  13.   

    上面这个程序刚开始也不行,输出的是222222222222,显示不能连接到数据库,于是我把数据库删除了又新建了下,于是上面的程序可以正常运行连接了。但是我原来的程序还是不行,就是上面的提示,意思好象是没有合适的驱动?什么意思嘛,郁闷!~ 我在ODBC源里面测试数据库的时候,提示监听程序无法识别当前连接描述符中请求的服务,我在网上找到个办法,把oracle_home\NETWORK\ADMIN下的listener.ora文件改了下,原来是
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = E:\OraHome_1)
          (PROGRAM = extproc)
        )
       改成:
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = E:\OraHome_1)
          (PROGRAM = extproc)
        )
       (SID_DESC =
          (GLOBAL_DBNAME = ORACLE)
           (ORACLE_HOME = E:\OraHome_1)   
           (SID_NAME = ORACLE)
         )  )
    重新启动了下,于是我的原程序就能正常连接了!汗,我都不知道到底是哪出错了,有哪位牛人能帮忙解释下吗?
    5555555555555555555555,弄了两天终于才弄好。汗额…………
      

  14.   

    can't connection db:java.sql.SQLException: No suitable driver
    query error:java.lang.Exception: datebase connection can't use!
    java.lang.NullPointerException
    没有适当的驱动
    数据库不能应用
    空指针错误有可能你的 数据库创建的有问题
      

  15.   

    可能是,创建的时候好象说EM没配置好。我原来的数据库就是突然不知道为什么EM打不开了,重新创建后EM还是不行,原程序访问出现的上面的提示,reboot computer后就能访问了,但是EM还是打不开。