JAVA中使用JDBC的SQL语法

JAVA中使用JDBC的SQL语法,java,sql,jdbc,Java,Sql,Jdbc,我遇到的问题是一个SQL语法错误,该语法在MySql workbench 6.0中有效,但在我的Java应用程序中无法通过JDBC工作,我对SQL和JDBC都是新手,我意识到我的结果集对于这个查询可能不是100%,这也可能是问题所在,它来自一个共享方法,在这种情况下,我更关心SQL查询语句。问题是您在最后选择的列名和中的之间缺少空格。要解释您的查询,您必须: Statement stmt = null; String query = "SELECT CarLot.CAR.Make, C

我遇到的问题是一个SQL语法错误,该语法在MySql workbench 6.0中有效,但在我的Java应用程序中无法通过JDBC工作,我对SQL和JDBC都是新手,我意识到我的结果集对于这个查询可能不是100%,这也可能是问题所在,它来自一个共享方法,在这种情况下,我更关心SQL查询语句。

问题是您在最后选择的列名和
中的
之间缺少空格。要解释您的查询,您必须:

Statement stmt = null;

    String query = "SELECT CarLot.CAR.Make, CarLot.CAR.Model, CarLot.CAR.Year, CarLot.CAR.Sold_Status, CarLot.OWNER.First_Name,CarLot.OWNER.Last_Name"+
            "FROM CarLot.CAR, CarLot.OWNER" +
                    " WHERE CarLot.CAR.Sold_Status = TRUE";

    try {
        con = getConnection();
        stmt = con.createStatement();

        ResultSet rs = stmt.executeQuery(query);

         String heading1 = "    Make"; String heading2 = "    Model"; String
         heading3 = "    Year"; String heading4="Sold Status";
         System.out.printf("%-20s %-20s %-20s %-20s\n", heading1, heading2,
         heading3,heading4);
         System.out.println("--------------------------------------------------------------------------\n");

        while (rs.next()) {

            String make = rs.getString("car.Make");
            String model = rs.getString("car.Model");
            int carYear = rs.getInt("car.Year");
            boolean soldStatus = rs.getBoolean("car.Sold_Status");
            String firstName = rs.getString("owner.First_Name");

            System.out.printf("%-2s %-20s %-20s %-20s %-20s\n", 
              make, model, carYear,soldStatus,firstName);

             }
        System.out.println("\n\n");
    } finally {
        stmt.close();

    }
这种错误很常见,因为很难在行尾看到缺少的空格,但我使用一种代码样式来解决这个问题-我在行首放空格,如下所示:

String query = "SELECT ..., CarLot.OWNER.Last_Name"+ // oops, no space!
        "FROM CarLot.CAR, CarLot.OWNER" +
         " WHERE CarLot.CAR.Sold_Status = TRUE";

每一行都以引号空格开头,即“…
”,因此现在,当一个断行字符串缺少空格时,这一点非常明显,而且因为SQL(通常)是不区分空格,您也可以在末尾添加空格,而不会造成任何问题。

问题是您在最后选定的列名和
中的
之间缺少空格。要解释您的查询,请执行以下操作:

Statement stmt = null;

    String query = "SELECT CarLot.CAR.Make, CarLot.CAR.Model, CarLot.CAR.Year, CarLot.CAR.Sold_Status, CarLot.OWNER.First_Name,CarLot.OWNER.Last_Name"+
            "FROM CarLot.CAR, CarLot.OWNER" +
                    " WHERE CarLot.CAR.Sold_Status = TRUE";

    try {
        con = getConnection();
        stmt = con.createStatement();

        ResultSet rs = stmt.executeQuery(query);

         String heading1 = "    Make"; String heading2 = "    Model"; String
         heading3 = "    Year"; String heading4="Sold Status";
         System.out.printf("%-20s %-20s %-20s %-20s\n", heading1, heading2,
         heading3,heading4);
         System.out.println("--------------------------------------------------------------------------\n");

        while (rs.next()) {

            String make = rs.getString("car.Make");
            String model = rs.getString("car.Model");
            int carYear = rs.getInt("car.Year");
            boolean soldStatus = rs.getBoolean("car.Sold_Status");
            String firstName = rs.getString("owner.First_Name");

            System.out.printf("%-2s %-20s %-20s %-20s %-20s\n", 
              make, model, carYear,soldStatus,firstName);

             }
        System.out.println("\n\n");
    } finally {
        stmt.close();

    }
这种错误很常见,因为很难在行尾看到缺少的空格,但我使用一种代码样式来解决这个问题-我在行首放空格,如下所示:

String query = "SELECT ..., CarLot.OWNER.Last_Name"+ // oops, no space!
        "FROM CarLot.CAR, CarLot.OWNER" +
         " WHERE CarLot.CAR.Sold_Status = TRUE";

每一行都以引号空格开头,即“…
”,因此现在很明显,当一个断行字符串缺少空格时,而且由于SQL(通常)不区分空格,因此您也可以在末尾添加空格,而不会引起任何问题。

FROM
子句之前添加空格

String query = "SELECT CarLot.CAR.Make, CarLot.CAR.Model, CarLot.CAR.Year, CarLot.CAR.Sold_Status, CarLot.OWNER.First_Name,CarLot.OWNER.Last_Name"+
    " FROM CarLot.CAR, CarLot.OWNER" +
    " WHERE CarLot.CAR.Sold_Status = TRUE";

旁白:考虑使用<代码> PraveReals> <代码>以防止攻击< /P> < P> > <代码> > < /C> >子句

中添加一个空格
String query = "SELECT CarLot.CAR.Make, CarLot.CAR.Model, CarLot.CAR.Year, CarLot.CAR.Sold_Status, CarLot.OWNER.First_Name,CarLot.OWNER.Last_Name"+
    " FROM CarLot.CAR, CarLot.OWNER" +
    " WHERE CarLot.CAR.Sold_Status = TRUE";

旁白:考虑使用<代码> PraveReals><代码>以防止攻击< /p> 查询的第一行和第二行之间没有空格,因此您有<代码>选择< /代码>…<代码>CarLot.OWNER.Last_name from CarLot。添加空格,看看会发生什么。

查询的第一行和第二行之间没有空格,因此您需要选择
<代码>CarLot.OWNER.Last_name from CarLot
。添加空格,看看会发生什么。

错误是什么?打印您的SQL语句,这样更容易调试。问题的标题是问题,虽然它是隐含的。错误是什么?打印您的SQL语句,这样调试就容易多了。问题的标题是问题,虽然它是隐含的。String query=“选择
制造
型号
年份
销售状态
,“+”
第一名
姓氏
”+”来自
汽车
车主
“+”“其中
已售出状态
=1和
已售出状态
=
已售出汽车
”,字符串查询=“选择
制造
型号
年份
已售出状态
,“+”
首名
末名
来自
汽车
车主
”+”其中
salled\u Status
=1和
idCar
=
car\u idCar
”;