2017-05-08 107 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