文章目录
一、场景说明
在工作中,数据库操作分了很多权限,比如,读写和只读权限,可能有些同事需要排查问题,临时需要查询线上数据库的数据,但我们的是读写权限,不能直接给他们用,而且又不能泄露密码给他们,两种方式,一种通过运维同事临时开一个只读账号,还有一种就是我们可以通过写一个程序,支持他们输入SQL查询,下面我们来实现一下第二种方式~
二、代码实现
我们以Java代码为例
1、引入mysql驱动包
因为没有使用到啥框架,所以我们首先需要引入mysql驱动包,下载地址downloads.mysql.com
2、具体代码实现
我们主要实现连接到MySQL数据库并执行用户输入的SQL查询,通过加载MySQL的JDBC驱动,创建一个到MySQL数据库的连接,然后创建一个Statement对象来执行SQL查询,并通过创建了一个Scanner对象来从控制台读取用户输入。
// mysql8.0以上版本com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver
private static final String driver = "com.mysql.jdbc.Driver";
private static final String con_url = "jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8";
private static final String user_name = "root";
private static final String user_passward = "forlan";
// 驱动只需要加载一次,所以放在静态代码块里面
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ResultSet rs = null;
try (Connection connection = DriverManager.getConnection(con_url, user_name, user_passward);
Statement stmt = connection.createStatement(); Scanner sc = new Scanner(System.in)) {
while (true) {
System.out.println("请输入要执行的sql:");
String sql = sc.nextLine();
StringBuilder sb = new StringBuilder();
rs = stmt.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData();
while (rs.next()) {
for (int i = 0; i < metaData.getColumnCount(); i++) {
String col_name = metaData.getColumnName(i + 1);// 获取列名
sb.append(col_name).append("=").append(rs.getObject(col_name)).append(";");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
} catch (Exception e) {
System.out.println("执行失败,请联系管理员处理");
e.printStackTrace();
}finally {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
三、生成jar包
上面写完代码后,我们使用IntelliJ IDEA生成jar包,按照下面的步骤操作即可~
1、打开File>Project Structure
显示以下窗口,按图中的步骤操作
2、设置启动类
在下面窗口的Main Class中,选择我们前面编写的main方法所在类作为启动类,点击OK
3、打开Bulid>Build Artifacts,按图中窗口操作
鼠标放在“All Artifacts”上,会弹出“Action”窗口
点击Bulid,可以看到已经生成jar包了
4、对jar包进行反编译处理
这里需要对jar包进行反编译处理,防止我们的密码泄露
四、测试效果
假设我们的库表数据如下:
mysql> select * from forlan_class;
+----+------------+
| id | class_name |
+----+------------+
| 1 | 初级班 |
| 2 | 中级班 |
| 3 | 高级班 |
| 4 | 大师班 |
| 5 | 成神班 |
| 6 | 神仙班 |
+----+------------+
编写“bat”脚本文件,或者直接打开命令窗口执行“java -jar queryCode.jar”也OK,脚本内容也是一样的东西,只是方便我们快捷使用
java -jar queryCode.jar
pause
双击bat脚本,输入我们要查询的sql,看到返回结果就OK了
五、总结
其实最核心的还是我们编写的Java代码,接受用户输入的SQL,然后处理识别SQL,进行数据库查询,然后只需要把我们的程序打包成可执行的jar包,然后就可以直接通过命令执行了,上面的方式,有个前提条件,就是需要你的电脑有安装jdk。