【问题标题】:Why doesnt my main class run the method i called?为什么我的主类不运行被调用的方法?
【发布时间】:2016-06-14 12:05:55
【问题描述】:

我有一个问题:我正在尝试在 java 中使用 jdbc for mysql 进行插入查询。我认为我的代码是正确的,但不知何故我无法运行我在主类中调用的方法。这是我想调用代码的方法:

public void wijzigAfspraak() {
    try {
        Statement stmt2 = conn.createStatement();
        String query2 = "";
        rs = stmt2.executeQuery(query2);
        System.out.println("query uitgevoerd");

        while (rs.next()){
            String titel = rs.getString(1);
            String datum = rs.getString(2);
            int urgentie = rs.getInt(3);
            String beschrijving = rs.getString(4);
            System.out.println(titel+datum+urgentie+beschrijving);
    }
    }
    catch (SQLException e){
        e.printStackTrace();
    }

}

这是我的主要课程:

public class Main {
public static void main(String[] args){

AfspraakDaoImpl adi = new AfspraakDaoImpl();
Afspraak afs = new Afspraak("","",1,"");
afs.setTitel("hond");
afs.setAfspraakDatum("12juni");
afs.setUrgentie(123);
afs.setBeschrijving("test");
adi.voegAfspraakToe();

adi.wijzigAfspraak();

}

我的控制台不打印任何内容,并且我的数据库显示数据没有差异,这意味着它不能正常工作?

提前致谢!

【问题讨论】:

  • 您确定您正在启动正确的main() 方法吗?你是如何启动应用程序的?从 IDE 还是从命令行?

标签: java mysql jdbc dao


【解决方案1】:

看起来你在这里执行空 SQL 查询:

String query2 = "";
rs = stmt2.executeQuery(query2);

如果要执行 INSERT 语句,应在语句对象 stmt2 上调用 executeUpdate() 方法,并将 SQL 字符串作为参数传递。

此外,请考虑使用PreparedStatement 而不是Statement,如下所示:

String sql = "INSERT INTO foo(value) VALUES(?)";
try (PreparedStatement ps = connection.prepareStatement(sql)) {
    ps.setString(1, "bar");
    ps.executeUpdate();
} catch (SQLException e) {
    // handle error
}

还有一件事。看起来您将 ResultSet rs 保留为类字段。不要这样做,尽量减少你的类的可变状态变量的数量,尽量保持你的组件轻量级和无状态。最好将StatementResultSet 保留在try-with-resources 块中。

【讨论】:

    【解决方案2】:

    由于您使用的是 DAO 并使用 MYSQL 数据库(此处未指定女巫;)):

    public void wijzigAfspraak(String 1, String 2, String 3, etc..) {
    try {
        Statement stmt2 = conn.createStatement();
        String query2 = "insert into afspraken (column_1, column_2, etc...)    values ( String 1, String 2, etc..)"; --> these values come from the wijzigafspraak(String 1, String 2, etc..)
        stm2.executeUpdate(query2);
        System.out.println("query is inserted correctly");
    

    您不想使用 rs.next(),女巫用于“SELECT-STATEMENT”,您不接收数据,而是插入它。

    然后,你的主要课程:

    public class Main {
    public static void main(String[] args){
    
    AfspraakDaoImpl adi = new AfspraakDaoImpl();
    Afspraak afs = new Afspraak("","",1,"");
    afs.setTitel("hond");
    afs.setAfspraakDatum("12juni");
    afs.setUrgentie(123);
    afs.setBeschrijving("test");
    //adi.voegAfspraakToe();//this is not specified?? and probably does not work either
    
    adi.wijzigAfspraak(afs.getTitel(), afs.getAfspraakDatum(), etc..);
    

    【讨论】:

      【解决方案3】:

      你的 sql 语句在哪里?应该是:

      String query2 = "select titel,datum,urgentie,beschrijving from Afspraak";
      

      【讨论】:

        猜你喜欢
        • 2015-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-07
        • 2017-12-07
        • 2019-07-03
        • 1970-01-01
        相关资源
        最近更新 更多