这两天在跟着学做一个人脸识别的小项目,是在IDEA上实现的,数据库用的是一个我以前没碰过的新东西,是阿里云的云数据库PolarDB。它是云原生关系型数据库,是阿里巴巴自主研发的下一代云原生关系型数据库,可兼容MySQL、PostgreSQL、高度兼容Oracle语法。

很明显了,作为渣渣的我,啥都不懂,就算是测试下连个数据库都会报错,还一直看不出毛病,今天又重新理了下,看了下,终于算是了解了,是我自己的毛病,傻眼了。还是记录下吧,顺便记录下自己的蠢。

其中我所用的DBUtil在这里,

package com.kaikeba.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtil {
    private static String url;
    private static String user;
    private static String password;

    static{
    	//加载配置文件
        Properties ppt = new Properties();
        InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
        try {
        	//从配置文件中加载数据库地址,帐号,密码等信息
            ppt.load(is);
            url = ppt.getProperty("url");
            user = ppt.getProperty("user");
            password = ppt.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 用于链接数据库,得到的结果是数据库的连接对象,链接对象具备了操作数据库的很多功能。=
     * @return 链接对象
     */
    public static Connection getConn(){

        //1.    获取数据库链接
        try {
            Connection conn = DriverManager.getConnection(url,user,password);
            //3.    将链接返回给工具的使用者
            return conn;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    /**
     * 断开数据库资源的链接,用于释放资源
     * @param conn 要释放链接
     * @param statement 要释放的执行环境
     * @param resultSet 要释放的结果集
     */
    public static void close(Connection conn, Statement statement, ResultSet resultSet){
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(statement != null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(resultSet != null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

}

先放张图,新建一个Web Application项目,里头东西是这些。

idea database 连接redis idea database 连接polardb_java


其中src中的util包不用管,我用来测试的只有那个test包,里头的程序也很简单,如下所示。

package com.kaikeba.test;

import com.kaikeba.util.DBUtil;

import java.sql.Connection;

public class Test1 {
    public static void main(String[] args) {
        Connection con=DBUtil.getConn();
    }
}

其中db.properties是个配置文件,里面放的是链接到我的PolarDB的内容,包括url,用户名和密码。内容如下。

idea database 连接redis idea database 连接polardb_数据库_02

但我运行这个测试程序的时候,报错了,如下:

idea database 连接redis idea database 连接polardb_配置文件_03


首先,先来明确下,在这个db的配置文件中,user和password不用多说了,就是你PolarDB创建高权限用户的账号和密码。

我划线画出来的,是放自己的集群地址的公网地址,下图中我划圈的地方,直接复制过去即可。

对了,在此之前,别忘记了把自己当前电脑的ip地址添加到集群白名单里,图里的左侧可以找到的。如果要搜自己电脑的ip,给个最简单的方法,直接浏览器输入ip搜索,即可找到自己的电脑对应的ip。

idea database 连接redis idea database 连接polardb_数据库_04


到这里都没问题的话,我的问题点出来了,就是第二张图里我圈出来的那里,它指的是此时你数据库里对应的某一个数据库库名。当我们登录这个云数据库时,它会默认给我们几个已有的数据库,每个都有自己的数据库名,当然你也可以在里头导入导出自己的数据。我的数据库名如图所示,

idea database 连接redis idea database 连接polardb_java_05


你在第二张圈里的数据库库名也只能是其中的一个,我之前没意识到,结果出错了。修改之后,保存。再运行,不报错,说明测试成功,已连接到数据库。

idea database 连接redis idea database 连接polardb_java_06