之前一直以为接口只是用来声明一些函数,相当于用来建一个框架。今天学用java连数据库,发现声明的Connection对象本身也是一个接口。不是说接口不能实例化吗,为什么能声明Connection的对象,好困惑……
   怎么实现接口才能做到像标准库理的接口一样,可以声明对象,通过对象调用函数package myjavaclass;import java.sql.*;public class dbcon {
    private static String url; //数据库连接字符串
    private static String username; //数据库用户名
    private static String password; //数据库密码
    public Connection conn;
    public dbcon() {
        url = "jdbc:oracle:thin:@localhost:1521:oracle";
        username = "_06604";
        password = "06604";
        conn = conn();
    }
    public dbcon(String u ,String p ,String ur)
    {
        url=ur;
        username=u;
        password=p;
        conn=conn();
    }
    public 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/ODBC driver.");
            return null;
        }
    }    public ResultSet query(String sql) {
        try {
            if (conn == null) {
                throw new Exception("database connection can't use!");
            }
            if (sql == null) {
                throw new Exception(
                        "check your parameter: 'sql'! don't input null!");
            }
            Statement stmt = conn.createStatement();
            System.out.println(sql);
            ResultSet rs = stmt.executeQuery(sql);
            return rs;
        } catch (Exception e) {
            System.out.println("query error:" + e);
            return null;
        }
    }    public boolean execute(String sql) {
        try {
            if (conn == null) {
                return false;
            }
            Statement stmt = conn.createStatement();
            stmt.executeUpdate(sql);
            stmt.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}这是我用来连接数据库的,不知道我说明白了没……

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【Dragon_L】截止到2008-07-30 16:55:22的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:0.00  %               结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=Dragon_L
      

  2.   

    好象是楼主理解错了吧, 用DriverManager.getConnection()方法来返回一个实现了Connection接口的对象,所以你可以用Connection这个类型的引用来获得这个对象这个可以看作是多态的一种实现.比如:
    interface A{}class A1 implements A{}class B{
      public A b1(){
          return new A1();
       }
       public static void main(String[] args){
        B b=new B();
        A a = b.b1(); //getReturn
      }
    }如果在上述代码中隐藏了方法b1,类B是publice的.那么你在其他地方调用类B的方法b1看上去就和获得Connection的形式差不多了,就和main方法里面的注释行差不多了.
      

  3.   

    , 用DriverManager.getConnection()方法来返回一个实现了Connection接口的对、----------
    ls正解。