2017-01-06 12 views
2

このクエリを実行するたびに、行1に「YEAR」というエラーが表示されます。私の列名はYEARなので何らかの理由で実行されません、が、他のすべての列がSQLデータベースクエリの構文エラー:「1行目にYEARが発生しました」

public void getYears() { 

    try { 
     Class.forName("org.apache.derby.jdbc.ClientDriver"); 
     Connection conn = DriverManager.getConnection(url,user,pWord); 
     Statement st = conn.createStatement(); 
     rs = st.executeQuery("SELECT YEAR FROM VEHICLES"); 
     while(rs.next()) { 
      jComboBox1.addItem(rs.getString("YEAR")); 
     } 
     conn.close(); 

    } catch (SQLException | ClassNotFoundException ex) { 
     Logger.getLogger(VehicleSearch.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

。正常に動作し、私は私の他の列に同じコードを持っており、VARCHAR(15)

+4

予約語警告!!!! – Hackerman

+0

docsを常に読んで....ここに完全なリストがあります:http://dev.mysql.com/doc/refman/5.7/en/keywords.html – Hackerman

+1

それは私が推測していたものです。その周りの文字列はうまく働いた。 SELECT * FROM VEHICLES "YEAR"から何かできることはありますか?文字列の中に? – Ryan

答えて

4

「年」で、YEAR列を実行しているとき、彼らは正常に動作していますreserved word in Apache Derby。列名として使用するには、二重引用符(")で囲んでエスケープする必要があります。

rs = st.executeQuery("SELECT \"YEAR\" FROM VEHICLES"); 
// Here ---------------------^-----^ 
+1

ありがとう!うまく働いた – Ryan

0

あなたはこのために、単一引用符(')を使用することができます。

rs = st.executeQuery("SELECT 'YEAR' FROM VEHICLES"); 
関連する問題