这是例外:当我在springs上运行我的testDao文件时,springs中是否有给数据库的路径?

    org.postgresql.util.PSQLException: The server requested password-based authentication, but no password was provided.
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:203)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:159)
    at org.postgresql.Driver.makeConnection(Driver.java:416)
    at org.postgresql.Driver.connect(Driver.java:283)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.test.dao.java.TestDao.getConnection(TestDao.java:37)
    at com.test.dao.java.TestDao.getTest(TestDao.java:61)
    at com.test.main.java.TestMain.main(TestMain.java:33)

这里是我的>> testDao文件,与PostgreSQL建立连接
   @Component
    public class TestDao {
    static PreparedStatement ps;
    ResultSet rs;
    Connection conn= null;

     /**
     * @return
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    private Connection getConnection() throws SQLException, ClassNotFoundException,FileNotFoundException,NullPointerException{


         if(conn==null)
         {
        try {
            Class.forName("org.postgresql.Driver");
            conn = DriverManager.getConnection(
                       "jdbc:postgresql://localhost:5432/testdb?user=postgres & password=postgres");
                    conn.close();
        }
                catch(Exception e) {
            e.printStackTrace();

        }
     }
         return conn;


    }

    /**
     * @param testId
     * @return
     * @throws SQLException
     * @throws ClassNotFoundException
     * @throws NullPointerException
     * @throws FileNotFoundException
     */
    public Test getTest(int testId) throws SQLException, ClassNotFoundException, FileNotFoundException, NullPointerException  {

            conn = getConnection();
        try {

            conn = getConnection();
            ps =conn.prepareStatement("SELECT * FROM testdb.testtab where id =?");
            ps.setInt(1, testId);
            Test test =null;
            rs = ps.executeQuery();
            if(rs.next())
            {
                test = new Test(testId, rs.getString("name"));
            }

    return test;
        }
        finally
        {
            rs.close();
            ps.close();
            conn.close();
        }


    }
    }

这里是我的>> springNew.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd "

xmlns:context="http://www.springframework.org/schema/context">
<!-- <context-annotation-config/> -->
<context:component-scan base-package="com.test.dao"/>
</beans>

最佳答案

我遇到了问题,并最终解决了它,首先需要提到架构,如下所示

 conn=DriverManager.getConnection("jdbc:postgresql://localhost:5432/testdb?currentSchema=testdb&user=postgres&password=postgres");

其次,我关闭了conn,因此它返回了空rs,并在使用前关闭了连接。

07-24 09:17