使用语句

时间:2018-03-31 12:06:00

标签: java mysql jdbc mysql-error-1064

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

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更改了表名(我确信我在代码中正确编写了它们)。

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

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

当服务器正在运行并且客户端发送查询时,会抛出异常,并显示以下消息(我处理了异常以向我显示此信息)。

  

SQLState:42000   错误代码:1064   消息:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的'SELECT * FROM`tb_name`'附近使用正确的语法

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

我该如何解决这个问题?数据库是否发送了错误,因此抛出异常或仅仅是代码?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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。 这里我们在get连接方法中包含了数据库名称 因此,在访问另一个数据库之前,每次都不需要使用数据库名称。

所以你的查询应该是

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