第一步 创建一个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语句的时候调用处理结果集的工具类即可
本文介绍了如何创建一个Java配置文件来存储数据库连接信息,并提供了两个工具类,一个用于建立数据库连接,另一个专门处理DQL查询结果的格式化。通过示例代码展示了如何使用这些工具类,包括对jdbc_test表的操作,展示处理后的DQL查询结果。
145

被折叠的 条评论
为什么被折叠?



