JDBC编程

JDBC表查询

测试方法
package jdbcs;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * <br>
 * 2019年12月4日下午9:34:53
 * 
 * @author
 * @version 1.0
 */
public class Test {

	/**
	 * 属性文件的名字
	 */
	private String properFile = 属性文件名;
	/**
	 * 查询sql语句
	 */
	private String sql = "select * from test8";
	/**
	 * 建表的sql语句
	 */
	private String createsql = "create table test8" + "(" + "id int auto_increment primary key," + "name varchar(255),"
			+ "age int" + ");";

	/**
	 * 插入数据
	 */
	private String inserttable = "insert into test8(name,age) values('xiaoming',18),('xiaohuavdsbsfbsrbsfynsrbaebsrbbrsnrsbtsbra',21)";
	/**
	 * 删除表的语句
	 */
	private String droptable = "drop table test8";

	/**
	 * 程序入口
	 * 
	 * @param args 入口参数
	 */
	public static void main(String[] args) {
		Test t1 = new Test();
		DriverTool t2 = new DriverTool();
		// 调用工具类的读取属性文件的方法
		t2.iniproperties(t1.properFile);
		try {
			// 连接数据库
			Connection connection = DriverManager.getConnection(t2.getUrl(), t2.getUser(), t2.getPassword());
			// 获取statement对象
			Statement statement = connection.createStatement();

			// 查询语句
			ResultSet rs = statement.executeQuery(t1.sql);

			//把结果集传入方法进行处理,再设置列的宽度
			new TableFormatter().execute(rs,10);

		} catch (SQLException e) {
			System.out.println("数据插入错误");
		}
	}
}
读写属性文件的类
package jdbcs;

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

/**
 * 工具类 <br>
 * 2019年12月5日下午9:00:35
 * 
 * @author 刘二朋
 * @version 1.0
 */
public class DriverTool {
	/**
	 * 驱动名
	 */
	private String driver;
	/**
	 * 连接地址
	 */
	private String url;
	/**
	 * 用户名
	 */
	private String user;
	/**
	 * 用户的密码
	 */
	private String password;

	/**
	 * 驱动的set方法
	 * 
	 * @return 返回驱动
	 */
	public String getDriver() {
		return driver;
	}

	/**
	 * 获取连接地址的方法
	 * 
	 * @return 连接地址
	 */
	public String getUrl() {
		return url;
	}

	/**
	 * 获取用户名的方法
	 * 
	 * @return 用户名
	 */
	public String getUser() {
		return user;
	}

	/**
	 * 获取用户密码的方法
	 * 
	 * @return 用户的密码
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * 读取属性文件赋值连接数据库参数,并加载驱动
	 * 
	 * @param propFile 要加载的属性文件
	 */
	public void iniproperties(String propFile) {
		// 创建一个Properties对象
		Properties props = new Properties();
		try {
			// 读取属性文件
			props.load(new FileInputStream(propFile));

		} catch (FileNotFoundException e) {
			System.out.println("属性文件没有找到,请检查属性文件");
		} catch (IOException e) {
			System.out.println("读取属性文件错误,请检查属性文件的内容");
		}

		// 通过key来获取属性文件
		driver = props.getProperty("driver");
		url = props.getProperty("url");
		user = props.getProperty("user");
		password = props.getProperty("password");

		try {
			// 加载驱动的方法
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			System.out.println("驱动可能不存在,请检查驱动");
		}
	}
}
查询语句的类
package jdbcs;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 执行查询语句的类<br>
 * 2019年12月6日上午11:38:51
 * 
 * @author 
 * @version 1.0
 */
public class TableFormatter {
	/**
	 * 小横线
	 */
	private static String striping = "-";
	/**
	 * 小加号
	 */
	private static String cross = "+";
	/**
	 * 小竖线
	 */
	private static String vertical = "|";
	/**
	 * 表列中间的间隔
	 */
	private static int number;
	/**
	 * 空格
	 */
	private static String blank = " ";

	/**
	 * 执行查询语句的方法
	 * 
	 * @param statement statement 对象
	 * @throws SQLException
	 */
	public void execute(ResultSet rs, int shuliang) throws SQLException {
		number = shuliang;
		// 分析结果集的元数据接口
		ResultSetMetaData rsm = rs.getMetaData();
		int a = rsm.getColumnCount();
		// 迭代输出列名
		// 打印表上面的曲线
		/** ----------------------+---------------------+-----------------------+ **/
		shucu(a, number);

		for (int i = 1; i <= a; i++) {
			// 打印竖线 |
			System.out.print(vertical);
			// 把结果转成字符串,进行处理
			String app = rsm.getColumnName(i);
			jinaqi(app);
		}
		System.out.println(vertical);
		// 打印表上面的曲线
		/** ----------------------+---------------------+-----------------------+ **/
		shucu(a, number);
		// 迭代输出ResultSet对象
		while (rs.next()) {
			// 依次输出每一列的值
			for (int i = 1; i <= a; i++) {
				// 打印竖线 |
				System.out.print(vertical);
				// 把结果转成字符串,进行处理
				String app = rs.getString(i);
				jinaqi(app);
			}
			System.out.println(vertical);

		}
		// 打印表上面的曲线
		/** ----------------------+---------------------+-----------------------+ **/
		shucu(a, number);

	}

	/**
	 * 输出横线的方法
	 * 
	 * @param a 每一列横线的长度
	 */
	public static void shucu(int a, int b) {
		for (int i = 0; i < a; i++) {
			System.out.print(cross);
			for (int j = 0; j < b; j++) {
				System.out.print(striping);
			}
		}
		System.out.print(cross + "\n");
	}

	/**
	 * 剪切字符串
	 * 
	 * @param str 要剪切的字符串
	 */
	public static void jinaqi(String str) {
		if (str == null) {
			str = "NULL";
		}
		// 计算字符串的长度
		int a = str.length();
		// 字符串小于等于15,则打印字符串
		if (a <= number) {
			int subtract = number - a; // 减
			int side = subtract / 2; // 一边的空格数量
			int surplus = subtract % 2; // 余数

			// 连接空格的方法
			System.out.print(kg(side) + str + kg(side + surplus));
			// 字符串大于列的长度,则剪切前面12位
		} else {
			String p = str.substring(0, number - 3);
			System.out.print(p + "...");

		}
	}

	/**
	 * 加空格的方法
	 * 
	 * @param a 要加的空格数量
	 * @return 返回加过空格的数据
	 */
	public static String kg(int a) {
		StringBuilder str = new StringBuilder();
		for (int i = 0; i < a; i++) {
			str.append(blank);
		}

		return str.toString();
	}
}
属性文件的内容
driver=驱动名
url=连接地址
user=用户账号
password=用户密码

以上功能,可实现查询出来的结果,列的长度可动态改变,每一列的数据 进行居中,如果列的数据大于列的长度,则截取前面的部分,后面加 ... 后缀名表示省略

向表里面插入数据 name列插入很长的一段数据
这是列宽50 所有数据的显示效果
在这里插入图片描述

这是列宽20 , 展示的效果
在这里插入图片描述

这是列宽10 展示的效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欢乐少年1904

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值