MySQL 1064 使用语句时出现语法错误

MySQL 1064 syntax error when using statement

我是 运行 一个服务器,它接收查询并使用语句将它们发送到数据库。

try{
    connection = dbConnection.getDbConnection();
    if(connection != null) {
         System.out.println("DA2");

        Statement mySt = connection.createStatement();
        if(mySt != null) {
           ResultSet myRs = mySt.executeQuery(query);
           System.out.println("DA3");

           while(myRs.next()){
               //getting data and printing it
           }
        }

}

它打印DA2,所以连接创建成功。 查询由客户端通过以下方式发送

DataOutputStream out = new DataOutputStream(client.getOutputStream());
String query = "USE db_name; SELECT * FROM `tb_name`;";
out.writeUTF(query);

我用 db_name 更改了数据库名称,用 tb_name 更改了 table 名称(我确信我在代码中正确地写了它们)。

服务器以这种方式接收它们

Socket client = socket.accept();
DataInputStream input = new DataInputStream(client.getInputStream());
String query = input.readUTF();

当服务器 运行 并且客户端发送查询时,将抛出异常并显示以下消息(我处理了异常以向我展示这一点)。

SQLState: 42000 Error Code: 1064 Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM `tb_name`' at line 1

相同的查询在 MySQL 数据库上正确运行。

我该如何解决这个问题?数据库是发回错误并抛出异常还是只是代码?

已解决:我忘记在连接中指定数据库名称。

您可以使用(具有限定名称的单个 SQL 语句):

String query = "SELECT * FROM db_name.`tb_name`";
public static Connection dbConnect() {
        Connection c = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            c = DriverManager.getConnection("jdbc:mysql://localhost:3306/DBNAME", "USERNAME", "PASSWORD");
        } catch (ClassNotFoundException e) {
            System.out.println("ClassNotFoundException " + e);
        } catch (SQLException e) {
            System.out.println("SQLException " + e);
        }
        return c;
    }

希望您已经以类似的方式创建了 dbConnect。 这里我们在获取连接方法中包含了数据库名称 因此,在访问另一个数据库之前,每次都明确不需要使用数据库名称。

所以你的查询应该是

String query = "SELECT * FROM `tb_name`";