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`";
我是 运行 一个服务器,它接收查询并使用语句将它们发送到数据库。
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`";