[英]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.