【问题标题】:Can't create SQL Statement - Java无法创建 SQL 语句 - Java
【发布时间】:2011-07-17 16:09:41
【问题描述】:

为游戏编写登录检查器,然后从 C# 切换到 java。问题是我使用较旧的代码作为示例,但通过从连接创建语句时不断遇到这个问题。我得到“未找到 createStatement() 符号”。是否有新的方法来执行 SQL 语句或有其他错误?

这里是源代码。

import java.sql.*;

public class SQLCheck {

    public Connection con;
    public void connect(){
        String host = "somewhereoutthere";
        String username = "stuff";
        String pass = "haclmolg";
        String db = "users";

        try{
            Class.forName("com.mysql.jdbc.Driver");
            String connectionUrl = "jdbc:mysql://"+host+"/"+db+"?";
            con = (Connection) DriverManager.getConnection(connectionUrl,username,pass);
            System.out.println("Server: Connected to MYSQL");
        } catch(SQLException e){
            System.out.println("Server: SQL EXECEPTION: " + e.toString());
        } catch (ClassNotFoundException cE){
            System.out.println("Server: Class not found: " + cE.toString());
        }
    }
    boolean checkLogin(String userName, String password){
        boolean correct = false;

        Statement s = con.createStatement();
    }
}

【问题讨论】:

  • 附带说明,如果用户数量超过少数,请考虑转换为 OpenID,或至少使用安全协议对用户进行身份验证。
  • 好的,一切都解决了。实际上,这两个答案都有帮助。是我忘记了“抛出 SQLException”
  • 从我从 OpenID 用户那里读到的信息来看,您可能希望远离它。

标签: java mysql sql


【解决方案1】:

您不应为自己的班级重复使用名称 Connection。当您声明 Connection 类型的对象时,您使用的不是 SQL,而是您自己的。

因此,当您声明变量 con 时,您声明的是 tanksgrid.Connection,而不是 java.sql.Connection。演员也是一样。而当你调用con.createStatement()时,你写的Connection类没有这个方法。

编辑:

随着源代码的更新,代码仍然存在一个挥之不去的问题:您需要捕获可能由createStatement() 抛出的SQLException。 (此外,该方法需要返回一个布尔值。)Eclipse 没有发现源代码有任何其他问题。

【讨论】:

  • 即使新建了一个类,仍然显示“con.createStatement() 找不到”
  • 是的,也许重命名类“TGConnection”或类似的东西?
  • 那你能更新原帖中的源代码吗?这个问题肯定存在于您的原始代码中。
  • 是的,我也重命名了它,新文件和所有内容。更新上面的源代码。
  • @Seandidk:检查我更新的答案,看看是否有帮助。我在 Eclipse 中进行了检查,因此如果编译器仍然认为 createStatement() 不是符号,那么您可能还有其他问题(例如过时的编译错误或其他问题 - 它有时会在 Eclipse 中发生)。跨度>
【解决方案2】:

命名冲突。编译器认为con 指的是你自己的Connection 类。

要么将类的名称从 Connection 更改为 MyConnection 或类似的名称,要么将 con 对象引用为 java.sql.Connection con; 如果这样做,还将类型转换从 (Connection) 更改为 (java.sql.Connection)

【讨论】:

  • +1:注意您可以使用完全限定名称 (java.sql.Connection)。
  • 还是什么都没有。不过这次有一个更好的编译错误。 “初始化:删除:C:\Users\Seand\Documents\NetBeansProjects\TanksGrid\build\built-jar.properties deps-jar:更新属性文件:C:\Users\Seand\Documents\NetBeansProjects\TanksGrid\build\built- jar.properties 将 1 个源文件编译到 C:\Users\Seand\Documents\NetBeansProjects\TanksGrid\build\classes C:\Users\Seand\Documents\NetBeansProjects\TanksGrid\src\tanksgrid\SQLCheck.java:36:未报告的异常 java .sql.SQLException; 必须被捕获或声明被抛出 Statement s = con.createStatement(); 1 error "
  • 好吧,只是我没有添加“throws SQLException”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
相关资源
最近更新 更多