2017-05-08 63 views
0

私の.getTablesおよび.prepareStatementが機能しません。私はjava.sql.*をインポートしなければならないと思っていました。他に何が必要なのか教えてください。あなたの時間をありがとう。両方の行の隣に「シンボルが見つかりません」と表示され、コンパイルされません。java.sqlインポートが機能しない

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

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)パッケージの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

使用しているものを追加する必要があります。実際にインポートを意図しているのはおそらくConnectionなのではありません。上記の行を削除すると、java.sql.*インポートが正しいものを取得する必要があります。

0

輸入品の一部が間違っています。それを機能させるには、以下が必要です。

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

1ステップ先に、データベース接続を確立するために別のクラスを用意することをお勧めします。このようにして、同じコードをもう一度繰り返す必要はありません。

サンプルコード。例えば、(このような適切なのための変更を行います。)

そして、これはノート

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

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

で呼び出すことができ

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

    } 

プロジェクトでDatabaseCon.javaクラスを持っていますあなたが言及したようにかなり大きなプロジェクトであれば、この方法は良いことです。

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

関連する問題