Синтаксическая ошибка, когда имя столбца содержит подчеркивание - PullRequest
2 голосов
/ 08 июня 2011

Я могу скомпилировать, но не могу выполнить следующий код с ошибкой (используя Postgres):

Fatal database error
ERROR: syntax error at or near "as"
Position: 13

import java.sql.*;
public class JDBCExample
{
private static final String JDBC_DRIVER = "org.postgresql.Driver";
private static final String URL = "jdbc:postgresql://hostname/database";
private static final String USERNAME = "username";
private static final String PASSWORD = "password";

public static void main(String[] args) throws Exception
{
  Connection dbConn = null;
  Statement query = null;
  ResultSet results = null;

  Class.forName(JDBC_DRIVER);

  try
  {
     dbConn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  }
  catch (SQLException e)
  {
     System.out.println("Unable to connect to database\n"+e.getMessage());
     System.exit(1);
  }

  try
  {
     query = dbConn.createStatement();
     results = query.executeQuery("select 20_5 as name from flowshop_optimums");

    while (results.next())
    {
      System.out.println(results.getString("name"));
    }

    dbConn.close();
  }
  catch (SQLException e)
  {
     System.out.println("Fatal database error\n"+e.getMessage());
     try
     {
        dbConn.close();
     }
     catch (SQLException x) {}
     System.exit(1);
  }

} // main

} // Example

Ответы [ 4 ]

5 голосов
/ 08 июня 2011

Это не подчеркивание, это факт, что имя столбца начинается с цифры.Вам нужно избежать этого.

Для MySQL используйте обратные метки.

select `20_5` as name from flowshop_optimums

Для SQL Server используйте квадратные скобки.

select [20_5] as name from flowshop_optimums

Для PostgreSQL используйте двойные кавычки.

select "20_5" as name from flowshop_optimums
1 голос
/ 08 июня 2011
results = query.executeQuery("select \"20_5\" as name from flowshop_optimums");

Но вы должны действительно изменить имя этого столбца.

0 голосов
/ 08 июня 2011

Вам необходимо заключить 20_5 в кавычки или скобки, в зависимости от того, используете ли вы MySQL или SQLServer соответственно.

0 голосов
/ 08 июня 2011

Попробуйте это: results = query.executeQuery («выберите« 20_5 »в качестве имени из streamhop_optimums»);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...