通过Java连接到MySQL时出现SQL语法错误

通过Java连接到MySQL时出现SQL语法错误,java,mysql,syntax,connection,Java,Mysql,Syntax,Connection,我用下面的代码通过Java连接到一个数据库 import java.sql.*; public class Can { //Database Credentials private static String userName = "root"; private static String password = "root"; private static String databaseName = "books"; static Connection connection = null;

我用下面的代码通过Java连接到一个数据库

import java.sql.*;

public class Can {

//Database Credentials
private static String userName = "root";
private static String password = "root";
private static String databaseName = "books";

static Connection connection = null; // manages connection
static Statement statement = null; // query statement
static ResultSet resultSet = null; // manages results

static Can can;


public static void main(String[] args) {

    can = new Can();
    ResultSetMetaData metaData;
    int numberOfColumns;


    try {
        connection = DriverManager.getConnection("jdbc:mysql://localhost/"+databaseName, userName, password);
        statement = connection.createStatement();
        connection.setAutoCommit(false);

        //creating the tables
        statement.executeUpdate("CREATE TABLE Instructor" + "(instructorID INT, instructorName VARCHAR(30), PRIMARY KEY (instructorID))");
        statement.executeUpdate("CREATE TABLE Lecture" + "(lectureID INT, lectureName VARCHAR(30), time TIME, credit INT, instructorID INT, PRIMARY KEY (lectureID))");
        statement.executeUpdate("CREATE TABLE LectureStudent" + "(lectureID INT, studentID INT, PRIMARY KEY (lectureID, studentID))");
        statement.executeUpdate("CREATE TABLE Student" + "(studentID INT, studentName VARCHAR(30), CGPA FLOAT, PRIMARY KEY (studentID))");
        statement.executeUpdate("CREATE TABLE Assignment" + "(assignmentID INT, deadline INT(30), lectureID INT, PRIMARY KEY (assignmentID))");
        statement.executeUpdate("CREATE TABLE Results" + "(resultID INT, grade FLOAT, PRIMARY KEY (resultID)");


        //inserting info. into the tables
        statement.executeUpdate("INSERT INTO Instructor VALUES('1', 'instructorName1')");
        statement.executeUpdate("INSERT INTO Instructor VALUES('2', 'instructorName2')");

        statement.executeUpdate("INSERT INTO Lecture VALUES('1', 'lectureName1', '20:16:40', '3', '1')");
        statement.executeUpdate("INSERT INTO Lecture VALUES('2', 'lectureName2', '20:33:20', '4', '1')");
        statement.executeUpdate("INSERT INTO Lecture VALUES('3', 'lectureName3', '20:33:25', '4', '2')");

        statement.executeUpdate("INSERT INTO LectureStudent VALUES('1', '100')");
        statement.executeUpdate("INSERT INTO LectureStudent VALUES('2', '100')");
        statement.executeUpdate("INSERT INTO LectureStudent VALUES('3', '100')");

        statement.executeUpdate("INSERT INTO Student VALUES('100', 'studentName1', '2.4')");
        statement.executeUpdate("INSERT INTO Student VALUES('200', 'studentName2', '2.5')");
        statement.executeUpdate("INSERT INTO Student VALUES('300', 'studentName3', '2.6')");

        statement.executeUpdate("INSERT INTO Assignment VALUES('1000', '1969-12-31 10:40:00.0', '1')");

        statement.executeUpdate("INSERT INTO Results VALUES('1', '90.0')");


        //commit the transaction
        connection.commit();

        connection.setAutoCommit(true);


        resultSet = statement.executeQuery("SELECT assignmentID, deadline, lectureID FROM Assignment");
        metaData = resultSet.getMetaData();
        numberOfColumns = metaData.getColumnCount();
        System.out.println("assignment");
        can.displayTable(resultSet, numberOfColumns, metaData);


        resultSet = statement.executeQuery("SELECT instructorID, instructorName FROM Instructor");
        metaData = resultSet.getMetaData();
        numberOfColumns = metaData.getColumnCount();
        System.out.println("instructor");
        can.displayTable(resultSet, numberOfColumns, metaData);


        resultSet = statement.executeQuery("SELECT lectureID, lectureName, time, credit, instructorID FROM LectureStudent");
        metaData = resultSet.getMetaData();
        numberOfColumns = metaData.getColumnCount();
        System.out.println("lecture");
        can.displayTable(resultSet, numberOfColumns, metaData);


        resultSet = statement.executeQuery("SELECT lectureID, studentID FROM LectureStudent");
        metaData = resultSet.getMetaData();
        numberOfColumns = metaData.getColumnCount();
        System.out.println("lecture_student");
        can.displayTable(resultSet, numberOfColumns, metaData);


        resultSet = statement.executeQuery("SELECT resultID, grade FROM Result");
        metaData = resultSet.getMetaData();
        numberOfColumns = metaData.getColumnCount();
        System.out.println("result");
        can.displayTable(resultSet, numberOfColumns, metaData);


        resultSet = statement.executeQuery("SELECT studentID, studentName FROM Student");
        metaData = resultSet.getMetaData();
        numberOfColumns = metaData.getColumnCount();
        System.out.println("student");
        can.displayTable(resultSet, numberOfColumns, metaData);


    } catch (SQLException e) {
        e.printStackTrace();
    }
    finally {
        // close the connection!
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {}
    }

}//END main



public void displayTable(ResultSet resultSet, int numberOfColumns, ResultSetMetaData metaData) {

    try {
        for(int i=1; i<=numberOfColumns; i++)
            System.out.printf("%-8s\t", metaData.getColumnName(i));
        System.out.println();

        while( resultSet.next () ) {

            for( int i=1 ; i<=numberOfColumns ; i++)
                System.out.printf("%-8s\t", resultSet.getObject(i));
            System.out.println();

        }
    } catch (Exception e) { }



}//END displayTable

}//END Can
有什么想法吗


谢谢,C@N.

为什么要在ID字段中输入。。。这是一个INT类型的列。将插入查询设置为

statement.executeUpdate("INSERT INTO Instructor VALUES(1, 'instructorName1')");

上一个create语句缺少右括号。

为什么要在ID字段中输入。。。这是一个INT类型的列。将插入查询设置为

statement.executeUpdate("INSERT INTO Instructor VALUES(1, 'instructorName1')");

上一个create语句缺少右括号。

请查看错误消息中的第35行?如果粘贴行时这些行是正确的,那就是最后一条CREATETABLE语句?那里的SQL有问题


更新:正如@ypercube在对您的问题的评论中指出的那样:您缺少一个右括号

看看第35行,错误信息是这样说的?如果粘贴行时这些行是正确的,那就是最后一条CREATETABLE语句?那里的SQL有问题


更新:正如@ypercube在对您的问题的评论中指出的那样:您缺少一个右括号

上一个Create语句中缺少右括号:。。。主键resultID

应该是:

    statement.executeUpdate("CREATE TABLE Results" + 
         "(resultID INT, grade FLOAT, PRIMARY KEY (resultID))");
                                                            ^
                                parenthesis added here -----|

上一个Create语句中缺少右括号:。。。主键resultID

应该是:

    statement.executeUpdate("CREATE TABLE Results" + 
         "(resultID INT, grade FLOAT, PRIMARY KEY (resultID))");
                                                            ^
                                parenthesis added here -----|

上一个Create语句中缺少右括号:主键resultID;这是相当多的代码。为什么不将问题隔离到单个SQL查询中?顺便说一下,您在连接方面没有问题,在执行SQL查询方面有问题;这是相当多的代码。为什么不将问题隔离到单个SQL查询中?顺便说一下,您在连接方面没有问题,但在执行SQL query.Yeap时有问题。我真傻。我困的时候不应该写代码。非常感谢。在一个大的try-catch块中抛出100条SQL语句并没有多大帮助。它仍然指出第35行是问题的根源。。。就在堆栈跟踪中。是的。我真傻。我困的时候不应该写代码。非常感谢。在一个大的try-catch块中抛出100条SQL语句并没有多大帮助。它仍然指出第35行是问题的根源。。。它就在堆栈跟踪中。