2010-12-16 54 views
9

Tôi gặp lỗi này khi cố gắng biên dịch mã bên dưới. Tôi muốn biết tôi đã làm gì sai.Ngoại lệ không được báo cáo java.sql.SQLException; phải bị bắt hoặc tuyên bố bị ném?

 
unreported exception java.sql.SQLException; must be caught or declared to be thrown 
Class.forName(myDriver); 

      ^
private void setupInfo() { 

    Driver driver = new org.gjt.mm.mysql.Driver(); 
    String url = "jdbc:mysql://localhost:3306/test"; 
    String username = "root"; 
    String password = "123456"; 

    String problemFeatureSpecTableName = "ProblemFeatureSpec"; 
    String solutionFeatureSpectTableName = "SolutionFeatureSpec"; 
    String classTableName = "Class"; 
    String extraDataTableName = "ExtraData"; 
    String casebaseTablename = "CaseBase"; 
    String problemTableName = "Problem"; 
    String solutionTableName = "Solution"; 
    String inactiveContextsTableName = "InactiveContext"; 
    String constantsTableName = "Constants"; 
    dbInfo = new DBInfo(new JDBCDriverInfo(driverName, url, username, password),constantsTableName); 
    problemSpecInfo = new FeatureSpecRDBInfo(problemFeatureSpecTableName, classTableName, extraDataTableName); 
    solutionSpecInfo = new FeatureSpecRDBInfo(solutionFeatureSpectTableName, classTableName, extraDataTableName); 
    rdbCasebaseInfo = new RDBCaseBaseInfo(casebaseTablename, solutionTableName, problemTableName, inactiveContextsTableName); 
} 
+3

Bạn đang đọc các hướng dẫn/ví dụ về JDBC của MySQL đã lỗi thời. [Trình điều khiển MM] (http://mmmysql.sourceforge.net/old-index.html) đã được MySQL tiếp quản hơn 8 năm trước và kể từ đó được gọi là [Connector/J] (http: // dev. mysql.com/downloads/connector/j/) với 'com.mysql.jdbc.Driver'. Tên lớp trình điều khiển MM chỉ được giữ lại cho khả năng tương thích ngược, nhưng bạn thực sự nên sử dụng 'com.mysql.jdbc.Driver'. Lỗi biên dịch của bạn không phù hợp với mã nguồn đã đăng. Bạn không sử dụng 'Class # forName()' ở bất cứ đâu trong nguồn. Thậm chí nhiều hơn, nó không ném 'SQLException' chút nào. – BalusC

Trả lời

11

Bạn có thể cần phải bắt ngoại trừ trong phương pháp của bạn:

public void setupInfo() 
{ 
    try 
    { 
     // call methods that might throw SQLException 
    } 
    catch (SQLException e) 
    { 
     // do something appropriate with the exception, *at least*: 
     e.printStackTrace(); 
    } 
} 

Hoặc tuyên bố phương pháp để ném SQLException:

private void setupInfo() throws SQLException 
{ 
    // call methods that might throw SQLException 
} 
+0

Bạn có thể thêm giải thích ngắn gọn về những gì họ làm không? –

+0

@AnubianNoob Java khá cơ bản. http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html –

+0

Tôi biết cách hoạt động, nhưng nó sẽ làm cho câu trả lời rõ ràng hơn. EDIT: Oh, tôi đã không nhận ra điều này là từ năm 2010, xin lỗi ... –

1

dòng này mã ném một uncaught e xception:

Driver driver = new org.gjt.mm.mysql.Driver(); 

thử điều này:

try { 
    Driver driver = new org.gjt.mm.mysql.Driver(); 
} 
catch (java.sql.SQLException e) { 
    // you may want to do something useful here 
// maybe even throw new RuntimException(); 
} 
2

Săn ngoại lệ hoặc vứt nó. Sử dụng tốt hơn một IDE (Eclipse hoặc Netbeans), sẽ cho bạn biết lỗi khi bạn nhấn enter.

1

Luôn cố gắng nhận trợ giúp từ IDE của bạn. Các IDE thường có thể tự động sửa lỗi. Nhấn alt + nhập vào IntelliJ IDEA hoặc ctrl + 1 trong Eclipse và chọn sửa lỗi.

+0

Thật không may (IMO) sửa chữa điển hình cho lỗi này là để bắt ngoại lệ, in một stacktrace để stderr và tiếp tục như thể không có gì đã xảy ra. Nó thường không phải là điều đúng để làm. –

+0

Thông thường có hai lựa chọn - bắt hoặc ném. – Nowaker

Các vấn đề liên quan