ConnSyBase dbSybase2 = ConnSyBase.getInstance();
try {
            dbSybase2.beginTransaction();
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
报:java.lang.NullPointerException

解决方案 »

  1.   

    ConnSyBase类 如下:
    public class ConnSyBase {    private static ConnSyBase db = null;    //数据库库连接对象
        private static Connection conn = null;    private Statement stmt = null;    private boolean hadErrors = false;    private ConnSyBase() throws Exception {
            if (conn == null) {
                Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance();
                String url = "jdbc:sybase:Tds:XXXX:5000/myDB";//myDB为你的数据库名
                Properties sysProps = System.getProperties();
                sysProps.put("user", "sa"); //设置数据库访问用户名
                sysProps.put("password", ""); //密码
                Connection conn = DriverManager.getConnection(url, sysProps);
                System.out.println("--------success------------in connection");
                stmt = conn.createStatement();
            }
        }    public void beginTransaction() throws Exception {
            conn.setAutoCommit(false);
        }    public void commitTransaction() throws Exception {
            if (!hadErrors) {
                conn.commit();
            } else {
                conn.rollback();
                hadErrors = false;
            }
            hadErrors = true;
            conn.setAutoCommit(true);
        }    public void ErrorOccur() {
            hadErrors = true;    }    public static ConnSyBase getInstance() {
            if (db == null) {
                System.out.println("--------ok-----------");
                try {
                    db = new ConnSyBase();
                } catch (Exception e) {
                    conn = null;
                    Log log = LogFactory.getLog("mylog");
                    log.error("数据库连接出错-DataStore.java");
                    return null;
                }
            }
            return db;
        }    //执行插入,删除和更新操作
        synchronized public void execute(String sql) throws SQLException {
            if (stmt != null)
                stmt.executeUpdate(sql);
            else {
                Log log = LogFactory.getLog("mylog");
                log.error("数据库插入出错");
            }
        }    //执行查询操作
        synchronized public ResultSet read(String sql) throws SQLException {
            if (stmt != null) {
                ResultSet tmp = null;
                tmp = stmt.executeQuery(sql);
                return tmp;
            } else {
                return null;
            }
        }    //执行查询个数操作
        synchronized public int readCount(String sql) throws SQLException {
            int nCount = 0;        try {
                if (stmt != null) {
                    ResultSet tmp = null;
                    if (tmp != null && tmp.next()) {
                        nCount = tmp.getInt(1);
                    } else {
                        nCount = 0;
                    }
                } else {
                    nCount = 0;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return nCount;
        }    //  终止数据库的连接
        synchronized public void stop() {
            try {
                if (conn != null) {
                    conn.close();
                    stmt.close();
                }
            } catch (Exception e) {
                Log log = LogFactory.getLog("mylog");
                log.error("数据库关闭出错-DataStore.java");
            } finally {
                conn = null;
            }
            System.out.println("----------connection-------is down");
        }
    }
      

  2.   

    ConnSyBase dbSybase2 = ConnSyBase.getInstance(); 
    这个没有取到Connection连接?
      

  3.   

    为什么没取到呢
    不懂,继续问下
    回答的有分,3楼的谢谢
    sybase和其它的都一样的,应该
    只是事物操作不会,能给我好的例子也行啊
      

  4.   

    一个singleton的ConnectionFactory,参考一下。import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    public class ConnectionFactory {
        private static String DB_DRIVER;
        private static String DB_URL;
        private static String DB_USER;
        private static String DB_PASSWORD;    
        // 静态变量首先加载private构造
        private static ConnectionFactory ref = new ConnectionFactory();        /**
         * 一个 singleton
         * 
         * */
        public static ConnectionFactory getInstance(){
            return ref;
        }    /**
         * 注册jdbc驱动
         * 
         * */
        private ConnectionFactory() {
            try {
                Class.forName(DB_DRIVER);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }    /**
         * 获取数据库的一个连接 
         * 
         * */
        public static Connection getConnection() throws SQLException {
            return DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
        }    /**
         * 关闭ResultSet
         */
        public static void close(ResultSet rst) {
            if (rst != null) {
                try {
                    rst.close();
                    rst = null;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }    /**
         * 关闭Statement
         */
        public static void close(Statement stmt) {
            if (stmt != null) {
                try {
                    stmt.close();
                    stmt = null;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }    /**
         * 关闭Connection
         */
        public static void close(Connection conn) {
            if (conn != null) {
                try {
                    conn.close();
                    conn = null;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }}
      

  5.   

    DB_DRIVER等信息可以到用类似下面的方法取得,楼主自己再改一下。
         
        Properties pros = new Properties();
        try {
            File file = new File("DBCONFIG.properties");
            pros.load(new FileInputStream(file));
            DB_DRIVER = pros.getProperty("DB_DRIVER");
            DB_URL = pros.getProperty("DB_URL");
            DB_USER = pros.getProperty("DB_USER");
            DB_PASSWORD = pros.getProperty("DB_PASSWORD");
        }
         catch(IOException e){
             e.printStatckTrace();
         }ps:楼主仔细看看你的
        public static ConnSyBase getInstance() {
            if (db == null) {
                System.out.println("--------ok-----------");
                try {
                    db = new ConnSyBase();
                } catch (Exception e) {
                    conn = null;
                    Log log = LogFactory.getLog("mylog");
                    log.error("数据库连接出错-DataStore.java");
                    return null;
                }
            }
            return db;
        }
    取得的是null吧!
      

  6.   

    其实你把构造里的这句
    Connection conn = DriverManager.getConnection(url, sysProps);改成conn = DriverManager.getConnection(url, sysProps);
    就ok了,conn被你覆盖了!
      

  7.   

    Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance();
                String url = "jdbc:sybase:Tds:XXXX:5000/myDB";//myDB为你的数据库名
                Properties sysProps = System.getProperties();
                sysProps.put("user", "sa"); //设置数据库访问用户名
                sysProps.put("password", ""); //密码
                Connection conn = DriverManager.getConnection(url, sysProps);
                System.out.println("--------success------------in connection");
                stmt = conn.createStatement();
      

  8.   

    你说的没错,但我现在改成你这样还是不行
    报错在 public void beginTransaction() throws Exception {
            conn.setAutoCommit(false);
        }
    java.lang.NullPointerException
    at com.jandar.db.ConnSyBase.beginTransaction(ConnSyBase.java:50)
      

  9.   

    来看看你的代码:
    1).
        //数据库库连接对象
        private static Connection conn = null;
    这个conn是属于类的!2).
    你的构造:
       private ConnSyBase() throws Exception {
            if (conn == null) {
                Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance();
                String url = "jdbc:sybase:Tds:XXXX:5000/myDB";//myDB为你的数据库名
                Properties sysProps = System.getProperties();
                sysProps.put("user", "sa"); //设置数据库访问用户名
                sysProps.put("password", ""); //密码             // ********** 注意这里,你这里声明了一个局域成员变量conn ,而属于类的conn还是null !
                Connection conn = DriverManager.getConnection(url, sysProps);
                System.out.println("--------success------------in connection");
                stmt = conn.createStatement();
            }
        }3).
    你的beginTransaction里
    public void beginTransaction() throws Exception {
            // ************ 注意 这里的conn 是null,当然会报NullPointerException了!!
            conn.setAutoCommit(false);
        }
    楼主看出问题了吗?一起学习,一起仔细!
      

  10.   

    谢谢楼上的,结贴了
    其实问题我已经找出来了,
    一直在忙与写程序,现在过来揭贴
    非常感谢bootupnow的指导