2017-05-08 84 views
0

我的.getTables.prepareStatement不起作用。我以爲我只需要導入java.sql.*這些工作。請讓我知道我還需要做什麼。感謝您的時間。它在兩行旁邊都顯示「找不到符號」,並且不會編譯。java.sql導入不起作用

import edu.lcc.citp.inventory.Product; 
import java.sql.DriverManager; 
import javax.jms.Connection; 
import java.sql.*; 
import java.util.ArrayList; 
import java.util.List; 
import javax.jms.JMSException; 

public class DatabaseProductDao implements DataAccessObject<Product> { 

Connection con; 

public DatabaseProductDao() throws SQLException, JMSException, ClassNotFoundException { 

    Class.forName("cockeb.org.apache.derby.jdbc.ClientDriver"); 

    try (Connection con = (Connection) DriverManager.getConnection("jdbc:derby://localhost:1527/store;create=true")) { 
     boolean exists = con.getMetaData().getTables(null, null, "PRODUCT", null).next(); 
     if (exists) { 
      System.out.println("Table Exists"); 
     } else { 
      String createDml = "CREATE TABLE PRODUCT (UPC VARCHAR(25), SHORT_DETAILS VARCHAR(50), LONG_DETAILS VARCHAR(5000), PRICE DECIMAL(10,2), STOCK INTEGER, PRIMARY KEY (UPC))"; 
      PreparedStatement createStatement =  con.prepareStatement(createDml); 
      createStatement.execute(); 
     } 
    } catch (SQLException e) { 
     System.out.println("Can Not Connect At This Time"); 
    } 
} 
+0

什麼是錯誤? –

+1

「我還需要做什麼」 - 如何描述問題? – immibis

+0

它說在每行旁邊找不到符號 – Spectre6

回答

1

問題出在進口。 您輸入了javax.jms.Connection,這是明顯錯誤的。只要刪除它。 你想要的是來自java.sql的連接類(java.sql.Connection)包。

此外,我不建議在導入時使用通配符(.*),但選擇您實際使用的具體類。在你的情況下:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
1

您需要添加以下的進口

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 

,而不是您正在使用

1

我建議你刪除這些行之一:

import javax.jms.Connection; 
import javax.jms.JMSException; 

。 ..因爲它可能不是您實際打算導入的Connection類。一旦刪除上面的行,您的java.sql.*導入應該抓取正確的導入。

0

你的一些進口是錯誤的。你需要在下面讓它工作。

import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.PreparedStatement; 
    import java.sql.Connection; 

一步之遙我想建議你有一個單獨的類來建立數據庫連接。這樣你就不需要再次重複相同的代碼。

示例代碼。 (爲此做適當的改變。)

例如有DatabaseCon.java類項目

package classes; 

    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.PreparedStatement; 

    public class DatabaseCon { 

     private static Connection c; 

     private static void connect() 
      throws Exception { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      String url = "db_url/db"; 
      c = DriverManager.getConnection(url, "username", "pass"); 
     } 

     public static PreparedStatement prepareState(String sql) 
      throws Exception { 

      if (c == null) { 
       connect(); 
      } 
      return c.prepareStatement(sql); 
     } 

    } 

然後可以通過

public void yourMethod() { 
     PreparedStatement p = null; 
     try { 
      p = DatabaseCon.prepareState("Your_query"); 
      ............ 

     } catch (Exception e) { 
      //catch it 
     } finally { 
      //do the final stuff 
     } 
} 

稱爲這種方法很好,如果它是一個相當大的項目,如你所說的。

0

您已導入一些錯誤的類供使用。

import java.sql.DriverManager; 
import javax.jms.Connection; 
import java.sql.*; 
import javax.jms.JMSException; 

jms進口是沒有用的;你已經導入了他們徒勞,這是在你的程序中造成問題。

所需的主要導入是java.sql。*, 如果您僅刪除jms導入,應用程序將正常工作。

但是,導入類的最佳做法是指定使用元素/方法的特定類。

請看這裏爲什麼Single import vs package import