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 展示的效果