for(int i=1;i<=fields.size();i++)
                     {
                      String field= rs.getString(i);
                      JTextField tb=(JTextField)fields.get(i-1);
                      tb.setText(field);
                      }   问题可能在这里,首先你应该把变量的定义在循环外,还有就是对他进行初始化,你上面的很可能有与数据库里没有记录,而变量的定义没有执行也没有初始化,而导致你后面引用时出项空指针异常。

解决方案 »

  1.   


      单步调试显示为   rs=stmt.executeQuery("select * from " + tablename);    这行的 stmt 为null  但我不明白为什么stmt为null  
      

  2.   

    你打印出"select * from " + tablename的内容看看,是不是这个串有问题,如果穿没有问题,就是你的数据库连接的问题。
    在String tablename=(String)tablenames.getSelectedItem(); 后面加上如下语句也可以:
    System.out.println("tablename================="+tablename);
    然后去log文里面看看输出的是什么,可能是tablename没有取出值来导致的。
      

  3.   

    if (rs!=null)  rs.close();然后你又对他操作了,你可以是是这样
    if (rs!=null)  rs=null;
      

  4.   

    to  :wjmmml(笑着悲伤)  rs=null 不行啊 还有 rs的定义在最后下面    单步调试显示是stmt为空  但我却不知道改怎么改
      

  5.   

    好了  问题我已经解决了  谢谢各位的帮助!!    我在  rs.close();    再加上了  String url="jdbc:odbc:db1";
                       Connection conn=DriverManager.getConnection(url);
                       Statement stmt= conn.createStatement();
        就行了    可能是连接的问题 但是 我现在还是不明白 因为在此之前的连接是好用的   
      

  6.   

    try
           {
             String url="jdbc:odbc:db1";
             Connection conn=DriverManager.getConnection(url);
             Statement stmt= conn.createStatement();
             md=conn.getMetaData();
             ResultSet mrs= md.getTables(null,null,null,new String [] {"TABLE"});
             while(mrs.next())
               { 
                  tablenames.addItem(mrs.getString(3));
               }
             mrs.close();  
            }你在这个代码段里的连接,对带马块之外的是不可见的,我也忽略了这一点。
    所以。,呵
      

  7.   

    to :wjmmml(笑着悲伤)
     但是我不能把每个对数据库的操作都写编连接啊  如果不把连接写成函数还有什么方法在程序中共享这个连接吗?   数据库的连接只能写在try语句内吗?
      

  8.   

    1,还要怎么共享连接,你建立连接以后不释放,拿着同一个连接到处用不就共享了么?
    2,不是说数据库连接非得写在try语句块内,只是因为连接过程的产生得异常需要捕获。所以你不得不
    try{
    ..}catch(Exception e){..//处理语句}当然你不想自己处理也可以抛出异常啊:
    public void xxx(xxx){
    throws Exception{
    ...
      Connection conn=DriverManager.getConnection(url);
    ...
    }
    这就不用try了
      

  9.   

    to :heifei() 
      
      非常感谢您的回答   还又个问题想向您请教 为什么我的程序刚一执行就会调用actionPerformed 这个函数? 是不是因为窗体一打开就调用了?
      

  10.   

    其实你应该做一个关于数据库连接的类,这样只要在需要的时候实力花这个类,调用相应的属性就可以了,我下面可以一个数据库连接类,你捎做改动就可以了。
    package jp.co.nec.JTC;import java.sql.*;
    import java.util.*;
    import java.io.*;
    public class JTCDBConnectionF implements Serializable{ /* 僐僱僋僔儑儞僆僽僕僃僋僩 */
    protected Connection con = null; /* 僐儞僗僩儔僋僞 */
    public JTCDBConnectionF() {
    }
    public void dbOpen() throws java.lang.Exception{
    if (con == null || con.isClosed()) {
    String url = "jdbc:oracle:oci8:@apsv";
    String user = "scott";
    String pass = "tiger";
    // 僪儔僀僶偺儘乕僪
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    // 俢俛偵愙懕
    con = DriverManager.getConnection(url,user,pass);
    // 僩儔儞僓僋僔儑儞僞僀僾偺愝掕
    con.setTransactionIsolation( con.TRANSACTION_READ_COMMITTED );
    con.setAutoCommit(false); System.out.println("DB OPEN");
    } else {
    System.out.println("OPENED DB");
    }
    }
    public JTCerrorF dbClose() {
    try {
    if (con != null && !con.isClosed()) {
    //儘乕儖僶僢僋(惓忢廔椆帪偼close偡傞慜偵忋埵偱僐儈僢僩偡傞偙偲)
    con.rollback();
    con.close();
    System.out.println("DB CLOSE");
    } else {
    System.out.println("CLOSED DB");
    }
    }
    catch (SQLException se) {
    // return new JTCerrorF(se.getErrorCode(),se);
    return new JTCerrorF("PD05",se);        //DB CLOSE
    }
    finally {
    con = null;
    }
    return (JTCerrorF)null;
    }
    }
      

  11.   

    上面的对你一定有用,你好好看看吧,这个类,是我做过的一个项目的数据库连接类,你少做改动就可以了,绝对没有bug。
      

  12.   

    非常感谢   heifei() 和   wjmmml(笑着悲伤)