jdbc—如何从mysql发送和接收原始字符串

lb3vh1jj  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(351)

我正在开发一个类似sql开发人员的应用程序,在这个应用程序中,用户输入一些sql命令,服务器的结果显示在 <div> 在网页上。
问题是用户可以输入任何字符串,不管是否是有效的sql,例如,如果用户发送 select * from employees; 我想接收并显示在 <div> 全文如下:

+---------+----------+---------------+----------+
| user_id | username | full_name     | password |
+---------+----------+---------------+----------+
|       1 | john     | John Doe      | admin    |

当他输入一个错误的sql字符串时 <div> 消息应该是标准的mysql错误字符串,例如:

mysql> select * from usrsss;
ERROR 1146 (42S02): Table 'mydb.usrsss' doesn't exist

我知道安全风险,我现在不在乎。
这可以做到吗,因为我无法控制用户发送的sql字符串语法?

v2g6jxz6

v2g6jxz61#

如果您正在使用 java.sql.Connection ,
首先使用 .createStatement() .
使用 .executeQuery() 用于搜索
以及 .executeUpdate() 用于插入、更新和删除
搜索时,标识要创建表的列数。

ResultSet rs = statement.executeQuery(String sql);
ResultSetMetaData metaData = rs.getMetaData();

ResultSetMetaData , .getColumnCount() 会给你列数。
在for循环中创建列,同时 .getColumnName(int index) 将为您提供列名。
创建表之后,迭代 ResultSet ,

while (rs.next()) {
    rs.getString(int columnIndex);
}

使用上述方法获取值,并向表中添加行。
别忘了把代码块用

try{

} catch(Exception e){
     e.getMessage();
}

所以如果出了什么问题你可以 SQLException 扔了。这将包括一条消息,错误的可能原因。
找到出路。。。好好享受!

dbf7pr2w

dbf7pr2w2#

首先,你看到的提示 mysql> 表示mysql shell。这不是sql或jdbc,而是mysql提供的命令行接口。
此mysql shell允许您执行:
sql语句。
不属于sql的各种其他语句。
您想要使用的JDBCAPI将允许您运行第一组语句——sql语句。不幸的是,它不允许你运行第二个,所以你对这个运气不佳。
另外,对于第一组,jdbcapi将提供错误代码和错误消息,它们与使用mysql shell时看到的不完全相同。
总之,您可以模拟其中的一些命令,但这与您可能期望的体验不完全相同。
然而。。。这是个大问题,你为什么要这么做?我的一个开发人员问我是否可以这样做,因为实现起来并不困难;这样我们就可以很容易地从web页面运行任何sql命令。伟大的?好。。。不,这是一个巨大的安全风险。如果有人入侵你的网页,你就暴露了整个数据库。
换句话说,不要将此代码部署到生产环境中。

相关问题