jdbc操作数据库

编写工具类

package com.zhuchun.stu;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;


/**
* @Project:px-autotest
* @Description:
* @Auther: zhuchun92@163.com
* @Date: 2020年03月27日 0:35
*/
public class JDBCUtil {
    public static Properties properties = new Properties();
    static{ //放解析 properties 文件的步骤,提升代码性能
        //从jdbc.properties 文件取配置
        System.out.println("静态代码块解析properties数据。");
        try {
            File file = new File("src/main/resources/jdbc.properties");
            InputStream inputStream = new FileInputStream(file);
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /** 快速添加注释快捷键:Alt+Enter ,选择 JavaDoc
     *  根据 sql 语句执行查询,以 Map 返回查询的数据
     * @param sql
     * @param values
     * @return
     */
    public static Map<String,Object> query(String sql, Object ... values) {
        Map<String,Object> map = null;  // 在 try 代码块外面声明,在 try 里面初始化,不然 return 会报错
        try {
            // 1.根据连接信息连接上数据库
            Connection connection = getConnection();
            // 2.获取PreparedStatement对象(此类型的对象有提供数据库操作方法)
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            // 3.设置条件字段值
            for (int i = 0; i < values.length; i++) {
                preparedStatement.setObject(i+1,values[i]);
            }
            // 4.调用查询方法,执行查询,返回 ResultSet 结果集
            ResultSet resultSet = preparedStatement.executeQuery();
            // 获取查询的元数据,返回类型为 ResultSetMetaData
            ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
            // 获取查询字段的个数
            int columncount = resultSetMetaData.getColumnCount();
            // 5.从结果集取查询数据
            map = new HashMap<String, Object>();
            while(resultSet.next()){
                for (int i = 1; i <= columncount; i++) {
                    // 根据查询字段的列序号,获取到列名
                    String columnlabel = resultSetMetaData.getColumnLabel(i);
                    // 根据获取到的列名,得到该列的值,并转换为 String 类型,进行返回
                    String columnvalue = resultSet.getObject(columnlabel).toString();   // 碰到空值字段会报空指针,暂未解决
//                    System.out.println(columnvalue);
                    // 将列名和列值,放进一个 map 的 kv 键值对
                    map.put(columnlabel,columnvalue);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return map;
    }


    /**
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        String url = properties.getProperty("jdbc.url");
        String user = properties.getProperty("jdbc.username");
        String password = properties.getProperty("jdbc.password");
        Connection connection = DriverManager.getConnection(url,user,password);
        return connection;
    }
}

调用测试

package com.zhuchun.stu;


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Map;
import java.util.Properties;
import java.util.Set;


/**
* @Project:cicpx-autotest
* @Description:
* @Auther: zhuchun92@163.com
* @Date: 2020年03月26日 23:52
*/
public class TestJDBC {
    public static void main(String[] args) throws IOException {
        TestJDBC testJDBC = new TestJDBC();
        // 1.通过类中的 query 方法
        testJDBC.query();
        // 2.通过 JDBCUtil 工具类中的 query 方法
        String sql = "select * from cicp_claim_apply where lnAcct = ? and partnerPolicyNo = ?";
//        JDBCUtil.query(sql);
        Object [] values = {"L20190xxxx705","Oxxxx86"};
        Map map = JDBCUtil.query(sql,values);
        // 遍历返回结果Map
        System.out.println("开始遍历map:");
        // 1.先将Map 中的 key 存放在一个 Set,
        Set<String> mset = map.keySet();
        // 2.再去循环此key来获取key对应的value
        for(String m : mset){
            System.out.println(m+":"+map.get(m));
        }


    }


    public void query() throws IOException {
        // 要执行的sql语句,问号 “?” 代表占位符
        String sql = "select * from cicp_claim_apply where lnAcct = ? and partnerPolicyNo = ?";
        //1.根据连接信息连接上数据库,从jdbc.properties 文件取配置
        Properties properties = new Properties();
        File file = new File("src/main/resources/jdbc.properties");
        InputStream inputStream = new FileInputStream(file);
        properties.load(inputStream);
        String url = properties.getProperty("jdbc.url");
        String user = properties.getProperty("jdbc.username");
        String password = properties.getProperty("jdbc.password");


        try {
            Connection connection = DriverManager.getConnection(url,user,password);
            // 2.获取PreparedStatement对象(此类型的对象有提供数据库操作方法)
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            // 3.设置条件字段值
            preparedStatement.setObject(1,"L2018xxxx656");
            preparedStatement.setObject(2,"Oxxxx96");
            // 4.调用查询方法,执行查询,返回 ResultSet 结果集
            ResultSet resultSet = preparedStatement.executeQuery();
            // 5.从结果集取查询数据
            while(resultSet.next()){
                System.out.println(resultSet.getObject("totalClaimAmt").toString());
                System.out.println(resultSet.getObject("totalPrinAmt").toString());
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}