jdbc操作数据库
- 软件开发
- 2022-07-25
- 12热度
- 0评论
编写工具类
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();
}
}
}