1
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();

    }

私が抱えている問題は SQL 構文エラーです。構文は MySql ワークベンチ 6.0 で機能しますが、JDBC を介して私の Java アプリでは機能しません。私は SQl と JDBC を初めて使用します。これも問題である可能性があります。これは共有メソッドからのものであり、この場合、SQLクエリステートメントにもっと関心があります。

4

3 に答える 3

2

問題は、最後に選択した列名と の間にスペースがないことですFROM。クエリを言い換えると、次のようになります。

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

このエラーは非常に一般的です。これは、行末にスペースがないことを確認するのが難しいためです。しかし、これに対抗するために使用するコード スタイルがあります。次のように、行頭にスペースを置きます

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

すべての行は引用スペース、つまり で始まる" ...ため、改行された文字列にスペースがない場合は非常に明白です。さらに、SQL は (一般に) 空白を区別しないため、最後にスペースを入れても問題はありません。

于 2013-11-15T00:28:25.467 に答える
2

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

余談: SQL インジェクション攻撃PreparedStatementから保護するために使用することを検討してください

于 2013-11-15T00:28:35.750 に答える
1

クエリの 1 行目と 2 行目の間にスペースがないため、select... CarLot.OWNER.Last_NameFROM CarLot... になります。スペースを追加して、何が起こるか見てみましょう。

于 2013-11-15T00:29:07.003 に答える