我正在运行一个接收查询的服务器,并使用语句将它们发送到数据库。
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数据库上正确运行。
我该如何解决这个问题?数据库是否发送了错误,因此抛出异常或仅仅是代码?
已解决:我忘记在连接中指定数据库名称。
答案 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`";