DriverManager.getConnection()上的编译错误“找不到符号”

时间:2010-11-04 06:28:06

标签: java

    import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Jdbc {

    public static void main(String args[]) {



        FileInputStream in = null;
        Connection con = null;
        try {

            Properties props = new Properties();
            in = new FileInputStream("/external/configuration/dir/db.properties");
            props.load(in);
            in.close();
            String driver = props.getProperty("jdbc.driver");
            if (driver != null) {
                Class.forName(driver);
            }
            String host = props.getProperty("jdbc.host");
            String port = props.getProperty("jdbc.port");
            String database = props.getProperty("jdbc.database");
            String username = props.getProperty("jdbc.username");
            String password = props.getProperty("jdbc.password");
            con = DriverManager.getConnection(host,port,database,username, password);
        } catch (Exception ex) {
            Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException ex) {
                    Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (Exception ex) {
                    Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }
    }
}

错误是:

1错误

C:\Users\Desktop>javac Jdbc.java
Jdbc.java:32: cannot find symbol
symbol  : method getConnection(java.lang.String,java.lang.String,java.lang.Strin
g,java.lang.String,java.lang.String)
location: class java.sql.DriverManager
            con = DriverManager.getConnection(host,port,database,username, passw
ord);

4 个答案:

答案 0 :(得分:3)

代码不会在代码中处理任何已检查的异常,如ClassNotFoundException,SQLException等,这就是编译器报告错误的原因。

尝试使用try / catch块包围main方法中的代码并编译程序。这应该有用。

注意:提供完整的信息(您获得的错误),以便其他人可以更好地帮助您。

答案 1 :(得分:2)

这是您的程序的编译版本 试着找出差异。 主要内容是导入异常处理

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Jdbc {

    public static void main(String args[]) {



        FileInputStream in = null;
        Connection con = null;
        try {

            Properties props = new Properties();
            in = new FileInputStream("/external/configuration/dir/db.properties");
            props.load(in);
            in.close();
            String driver = props.getProperty("jdbc.driver");
            if (driver != null) {
                Class.forName(driver);
            }
            String url = props.getProperty("jdbc.url");
            String username = props.getProperty("jdbc.username");
            String password = props.getProperty("jdbc.password");
            con = DriverManager.getConnection(url, username, password);
        } catch (Exception ex) {
            Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException ex) {
                    Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (Exception ex) {
                    Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }
    }
}

答案 2 :(得分:0)

根据http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-basic.html,您应该使用Class.forName(driver).newInstance();代替Class.forName(driver);

答案 3 :(得分:0)

在我的情况下,sbt run工作正常,我在sbt test中收到错误,因为DriverManager.scala找不到jdbc驱动程序:

  

java.sql.SQLException:找不到合适的jdbc驱动程序:postgresql

我通过在代码中添加以下行来解决这个问题(在运行模式下正确使用postgresql驱动程序)

DriverManager.registerDriver(new org.postgresql.Driver());

我希望它有所帮助。