连接数据库N中方法

方法一:使用properties配置连接数据库

1.设置Properties类、设置Connection类、设置PreparedStatement类

  • Properties类用于读取xxxx.propertiesp配置文件
  • Connection类用于连接数据库
  • PreparedStatement类用于预处理搬运工(对数据库的增删查改)

预处理搬运工其它方法:对表的插入操作,其他操作其实也是一样的,只是查找调用的方法是executeQuery()而已.返回的是个resultSet结果集而已,打印输出即可.

    static Properties pros;
    static Connection conn = null;
    static PreparedStatement ps = null;

静态的sql简单是已经写死了,固定了的sql语句,而封装的sql语句是不能更改的,所以说开发往往都不用静态的.参数化的sql语句是不固定的,用?来占用值,相当于萝卜坑,一个数据一个坑,最后组成一条数据.很灵活.


数据库(增,删,改)操作

    @param sql 操作数据库的SQL语句   @param param  用?代表参数的数组   @return 如果成功返回大于0的数字   

    public int executeUpdate(String sql, Object[] param) {
        //创建一个PreparedStatement对象用来操作数据库
        PreparedStatement pstmt = null;
        try {
            //getConnection()方法为我自己定义的获取数据库连接的方法
            pstmt = getConnection().prepareStatement(sql);
            //判断param数组是否为空
            if (param != null) {
                //用for循环来给所有参数赋值
                for (int i = 0; i < param.length; i++) {
                    pstmt.setObject((i + 1), param[i]);
                }
            }
            //用来返回受影响的行数
            return pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//            closeAll(conn, pstmt, null);
            log.info("发送错误");
        }
        //返回-1表示数据操作失败
        return -1;
    }

对查询结果处理,      //原文链接:https://blog.csdn.net/AnyingVirusKing/article/details/52187897

        //1.创建预处理的搬运工对象
        String sql = "insert into testjdbc.t_user (name1,age,sex) values(?,?,?)";
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        //2.SQL语句已预编译并存储在PreparedStatement对象中
        //对sql语句中的?进行赋值
        //使用给定对象设置指定参数的值。
        preparedStatement.setObject(1, "历史");//对第一个?进行赋值
        preparedStatement.setObject(2, 5);//对第二个?进行赋值
        preparedStatement.setObject(3, "男");//对第三个?进行赋值
        //3.执行sql语句
        int i = preparedStatement.executeUpdate();
        System.out.println(i);

数据库(查)操作

将查询结果写入到cvs表格中      @param defiled_info sql查询结果      @param fileName fileName为下载文件名,防止文件重名覆盖,可加入时间戳

        String rootPath = "";
        if(fileName == null){
            rootPath = "D:/file_"+ System.currentTimeMillis()+".csv";
        }else {
            rootPath = "D:/"+fileName+System.currentTimeMillis()+".csv";
        }
        //第一个参数为文件存储路径,第二个为指定导出的文件字段间的间隔符,第三个参数为转出编码
        CsvWriter csvWriter = new CsvWriter(rootPath, '|', Charset.forName("GBK"));
        //需要确保查询的结果不能为空,也可以在这做判断,不为空才能自动取表头,不然需要手动传入表头
        HashMap hashMap = defiled_info.get(0);
        Set defiled_sets = hashMap.keySet();
        if (defiled_sets.size() > 0) {
            for (String key : defiled_sets) {
                //写入表头信息
                csvWriter.write(key, false);
            }
            //换行
            csvWriter.endRecord();
        }
        //写入类容信息
        for (int k = 0; k < defiled_info.size(); k++) {
            HashMap infos = defiled_info.get(k);
            for (String key : defiled_sets) {
                //如果某字段为空,这转义为字符串"null"
                if (infos.get(key) == null) {
                    csvWriter.write("null");
                } else {
                    csvWriter.write(infos.get(key).toString());
                }
            }
            csvWriter.endRecord();
        }
        csvWriter.close();//关闭流

将单个单个输出

        ps=mysqlConnect().prepareStatement("select * from testjdbc.t_user");
        //log.info("查询结果"+ps);
        ps.execute();
        ResultSet rs = ps.executeQuery();
        log.info(rs);
        while (rs.next()) {
            System.out.println("账号:" + rs.getInt("id") +
                    "  密码:" + rs.getString("sex") +
                    "  姓名:" + rs.getString("name1") +
                    "  年龄:" + rs.getInt("age"));
        }

关闭资源

        //4.关闭资源
        preparedStatement.close();
        conn.close();

你可能感兴趣的:(数据库,oracle)