java.sql 导入不工作

java.sql import not working

我的 .getTables.prepareStatement 不工作。我以为我只需要导入 java.sql.* 就可以使它们工作。请让我知道我还需要做什么。感谢您的时间。它在两行旁边都显示 "cannot find symbol" 并且不会编译。

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");
    }
}

您需要添加以下导入

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

而不是您正在使用的那个

我建议您删除这些行:

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

...因为它可能不是您实际打算导入的 Connection class。删除上面的行后,您的 java.sql.* 导入应该获取正确的。

问题出在导入上。 您导入了 javax.jms.Connection,这是非常错误的。只需删除它。 您想要的是 java.sql (java.sql.Connection) 包中的连接 class。

此外,我不建议在导入时使用通配符 (.*),而是选择您实际使用的特定 class。在你的情况下:

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

你的一些输入是错误的。您需要以下内容才能使其正常工作。

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

先行我建议你有一个单独的class来建立数据库连接。这样你就不需要再重复同样的代码了。

示例代码。 (根据需要对此进行更改。)

例如在你的项目中有一个 DatabaseCon.java class

  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
      }
 }

注意如果是你说的比较大的项目,这种方式还是不错的。

您导入了一些错误的 classes 以供使用。

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

jms导入没用;您徒劳地导入了它们,这导致您的程序出现问题。

需要的主要导入是java.sql.*, 如果您只删除 jms 导入,应用程序将正常工作。

但是,导入 classes 的最佳做法是指定您从中使用 element/method 的特定 class。

原因看这里Single import vs package import