java 连接mysql 数据库 的工具类 以及格式化DQL查询结果的工具类

本文介绍了如何创建一个Java配置文件来存储数据库连接信息,并提供了两个工具类,一个用于建立数据库连接,另一个专门处理DQL查询结果的格式化。通过示例代码展示了如何使用这些工具类,包括对jdbc_test表的操作,展示处理后的DQL查询结果。

第一步 创建一个ini文件的属性文件 主要包含 连接数据库的驱动
以及连接地址 账号密码等,放在项目的目录下,内容如下:在这里插入图片描述下面是 获取数据库连接的工具类,以及处理DQL语句的工具类

package eleven_jdbc;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 *  读取属性文件工具类,连接数据库
 * @author Administrator
 *2019年12月6日下午2:39:19
 */
public class DriverTools {
	

	/**
	 * 驱动名
	 */
	private  String driver;
	/**
	 * 连接地址
	 */
	private  String url;
	/**
	 * 连接账号
	 */
	private String user;
	/**
	 * 连接密码
	 */
	private  String password;
	
	/**
	 * 	读取缓存文件
	 * @param paramFile
	 */
	public void initparam(String paramFile) {
		//	读取属性文件
		Properties props=new Properties();
		try {
			props.load(new FileInputStream(paramFile));
		} catch (FileNotFoundException e) {
			// TODO: handle exception
			System.out.println("没有找到此配置文件,请检查项目路径下是否包含"+paramFile);
		}catch (IOException e) {
			// TODO: handle exception
			System.out.println("配置文件读取错误;请检查配置文件内容");
		}
		driver=props.getProperty("driver");
		url=props.getProperty("url");
		user=props.getProperty("user");
		password=props.getProperty("password");
		try {
			Class.forName(driver);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("没有找到驱动,请检查项目的classpath中是否已经添加此驱动");
		}
		
	}
	
	/**
	 * 获取Statement对象
	 * @return
	 */
	public Statement getStatement() {
		try {
			Connection connection=DriverManager.getConnection(url,user,password);
			Statement statement=connection.createStatement();
			//加载驱动
			Class.forName(driver);
			return statement;
		} catch (SQLException e) {
			// TODO: handle exception
			System.out.println("数据添加失败");
            e.printStackTrace();
		}catch (ClassNotFoundException e) {
			// TODO: handle exception
			System.out.println("没有找到驱动,请检查项目的classpath中是否已经添加此驱动");
            e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 	获取PreparedStatement对象
	 * @param sql 	SQL语句
	 * @return
	 */
	public PreparedStatement getPreparedStatement(String sql) {
		try {
			//获取数据库连接
			Connection connection=DriverManager.getConnection(url,user,password);
			PreparedStatement ps=connection.prepareStatement(sql);
			return ps;
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return null;
	}

}

下面是处理DQL的工具类:

package eleven_jdbc;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

/**
 * 格式化查询结果的工具类
 * 
 * @author Administrator 2019年12月6日下午7:16:23
 */
public class TableFormatter {

	private String jia = "+";
	private String jian = "-";
	private String shu = "|";
	// 默认 - 的数量是10个 可以修改
	private int count = 10;

	/**
	 * 处理查询到的结果集
	 * 
	 * @param resultSet
	 */
	public void excuteQuery(ResultSet resultSet) {

		try {

			printf(resultSet);

		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}

	}

	/**
	 * 对查询到的结果集进行解析
	 * @param columnCount
	 * @throws SQLException
	 */
	private void printf(ResultSet resultSet) throws SQLException {
		ResultSetMetaData metaData = resultSet.getMetaData();
		int columnCount = metaData.getColumnCount();
		System.out.println("列数:" + columnCount);
		printf(columnCount);

		for (int i = 1; i <= columnCount; i++) {
			// 如果列的值不超过定的线条的最大值
			if (count > metaData.getColumnName(i).length()) {
				dispose(metaData.getColumnName(i));
			} else {
				StringBuilder sb2 = new StringBuilder();
				// 如果超过了就要截取下来
				sb2.append(metaData.getColumnName(i).substring(0, 5)+"..") ;
				dispose(sb2.toString());
			}
		}
		System.out.print(shu);

		System.out.println();

		// 打印表头
		printf(columnCount);
		// 获取是否有下一行
		while (resultSet.next()) {

			for (int i = 1; i <= columnCount; i++) {
				//判断表中的值为null的情况下
				if (resultSet.getString(i)==null) {
					dispose("NULL");
					continue;
				}
				
				// 如果列的值不超过定的线条的最大值
				if (count > resultSet.getString(i).length()) {
					
					dispose(resultSet.getString(i));

					// 如果超过了就要截取下来
				} else {
					StringBuilder sb2 = new StringBuilder();
					String sub = resultSet.getString(i).substring(0, 6);
					sb2.append(sub+"..");
					dispose(sb2.toString());
				}

			}
			System.out.println(shu);
		}
		printf(columnCount);

	}

	/**
	 * 处理结果 处理字符串
	 * 
	 * @param string
	 */
	private void dispose(String string) {
		// 每列值得长度
		int b = string.length();
		StringBuilder sb2 = new StringBuilder();
		// 如果列的数据的长度是偶数的情况下
		if ((count - b) % 2 == 0) {
			int c = (count - b) / 2;
			for (int j = 1; j <= c; j++) {
				sb2.append(" ");
			}
			System.out.print(shu + sb2 + string + sb2);
		}
		// 如果列的数据的长度是基数的情况下
		else {
			int c = (count - b) / 2;
			for (int j = 1; j <= c; j++) {
				sb2.append(" ");
			}
			System.out.print(shu + sb2 + string + sb2 + " ");
		}

	}

	/**
	 * 打印第一行表头
	 * 
	 * @param columnCount
	 */
	private void printf(int columnCount) {
		StringBuilder sb = new StringBuilder();

		for (int i = 1; i <= columnCount; i++) {
			sb.append(jia);
			for (int j = 1; j <= count; j++) {
				sb.append(jian);
			}
		}
		sb.append(jia);
		System.out.println(sb.toString());
	}

}

下面是示例代码:

package eleven_jdbc.section_twelve;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import eleven_jdbc.DriverTools;
import eleven_jdbc.TableFormatter;

public class Test {
	//属性文件名
	public String paramFile="mysql.ini";
	//执行的SQL语句
	public String insertSQL="insert into jdbc_test(name,age) "
            + "values('aasdfghhgfd5',18) , ('basdfghhgfd5',19) , ('casdfghhgfd5',20)";
	//执行的SQL语句
	public String emptySQL="truncate jdbc_test";
	//执行的SQL语句
	public String selectSQL="select * from jdbc_test";
	
	public static void main(String[] args) {
		//当前类的对象
		Test t = new Test();
		//工具类的对象
		DriverTools dr = new DriverTools();
		//工具类的对象
		TableFormatter tb = new TableFormatter();
		//读取 ini文件
		dr.initparam(t.paramFile);
		 //用工具类的对象直接连接到数据库
		Statement statement=dr.getStatement();
		try {
			//需要执行的SQL语句
			ResultSet result=statement.executeQuery(t.selectSQL);
			tb.excuteQuery(result);
			System.out.println("执行完成");
		} catch (SQLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}
}

上面例子,主要描述了这两个工具类怎么用,首先在数据库有个jdbc_test表,内容如下:在这里插入图片描述而利用工具类处理DQL后的结果如下:
在这里插入图片描述处理DDL和DML的只需要调用不同方法即可,传入对需要执行的SQL语句就可以执行,而执行DQL语句的时候调用处理结果集的工具类即可

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值