簡體   English   中英

Java try-catch 連接中的錯誤“資源類型連接未實現 java.lang.AutoCloseable”

[英]Java error "The resource type Connection does not implement java.lang.AutoCloseable" in the try-catch connection

我在可自動關閉的 class 中遇到此錯誤,在我嘗試建立連接以將數據插入 mysql 數據庫的行中,在 try-catch 中。我做了所有必要的導入,對包和類的引用,但我沒有成功

錯誤行:

try (Connection connection = getConnection();
                PreparedStatement preparedStatement = connection.prepareStatement(INSERT_CRIANCA_SQL))
package dao;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.sun.jdi.connect.spi.Connection;

import model.Crianca;

public class CriancaDao {
    
    private String jdbcURL = "jdbc:mysql://localhost:3306/userdb?useSSL=false";
    private String jdbcUsername = "root";
    private String jdbcPassword = "root";
    private String jdbcDriver = "com.mysql.jdbc.Driver";
    
    private static final String INSERT_CRIANCA_SQL = "INSER INTO crianca" + "(nome,cpf,email,dataNasc,senha,responsavel,dentistaResponsavel,avatar,atendimento) VALUES " + "(? , ? , ? , ? , ? , ?, ?, ?, ?); ";
    private static final String SELECT_CRIANCA_BY_ID = "select id, nome,cpf,email,dataNasc,senha,responsavel,dentistaResponsavel,avatar,atendimento from crianca  where id =?";
    private static final String SELECT_ALL_CRIANCA = "select * from crianca";
    private static final String DELETE_CRIANCA_SQL = "select from crianca where id = ?";
    private static final String UPDATE_CRIANCA_SQL = "update crianca set name = ?, cpf ?, email = ?, dataNasc = ?, senha = ?, responsavel = ?, dentistaResponsavel = ?, avatar = ?, atendimento = ? ;";
    
    public CriancaDao() {
        
    }
    protected Connection getConnection() {
        Connection connection = null;
        try {
            Class.forName("jdbcDriver");
            connection = (Connection) DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);     
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return connection;
    }
    
    public void insertCrianca(Crianca crianca) throws SQLException {
        System.out.println(INSERT_CRIANCA_SQL);
        try (Connection connection = getConnection();
                PreparedStatement preparedStatement = connection.prepareStatement(INSERT_CRIANCA_SQL)) {
            preparedStatement.setString(1,  crianca.getNome());
            preparedStatement.setString(2,  crianca.getCpf());
            preparedStatement.setString(3,  crianca.getEmail());
            preparedStatement.setString(4,  crianca.getDataNasc());
            preparedStatement.setString(5,  crianca.getSenha());
            preparedStatement.setString(6,  crianca.getResponsavel());
            preparedStatement.setString(7,  crianca.getDentistaResponsavel());
            preparedStatement.setString(8,  crianca.getAvatar());
            preparedStatement.setString(9,  crianca.getAtendimento());
            System.out.println(preparedStatement);
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            printSQLException(e);
        }
    }
    
    }
try (Connection connection = getConnection();
                PreparedStatement preparedStatement = connection.prepareStatement(INSERT_CRIANCA_SQL))

該語句意味着您可以在 try-with-resources 塊中使用任何 class,只要它實現了 AutoCloseable 接口。

也許你的庫版本與 Java 版本不兼容。 您可以查找與 java 版本兼容的庫。

您使用的是錯誤的Connection 您正在使用的Connection class 來自 package com.sun.jdi.connect.spi ,它不是數據庫連接,不能與來自java.sql的其他類一起使用。 根據Javadocs的說法,它是“調試器和它調試的目標 VM 之間的 [a] 連接。”。 它也沒有實現AutoCloseable ,導致你的錯誤。

Connection的導入更改為從java.sql導入。 該接口確實擴展了AutoCloseable

import java.sql.Connection;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM