簡體   English   中英

使用語句時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更改了表名稱(我確定我在代碼中正確地寫了它們)。

服務器以這種方式接收它們

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數據庫上正確運行。

我該如何解決? 數據庫是發回錯誤並因此引發異常還是僅僅是代碼?

已解決:我忘了在連接中指定數據庫名稱。

您可以使用(具有限定名稱的單個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。 在這里,我們已經將數據庫名稱包含在get連接方法中,因此明確地,每次訪問另一個數據庫之前,無需每次都使用數據庫名稱。

所以你的查詢應該是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM