我正在开发一个类似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字符串语法?
2条答案
按热度按时间v2g6jxz61#
如果您正在使用
java.sql.Connection
,首先使用
.createStatement()
.使用
.executeQuery()
用于搜索以及
.executeUpdate()
用于插入、更新和删除搜索时,标识要创建表的列数。
在
ResultSetMetaData
,.getColumnCount()
会给你列数。在for循环中创建列,同时
.getColumnName(int index)
将为您提供列名。创建表之后,迭代
ResultSet
,使用上述方法获取值,并向表中添加行。
别忘了把代码块用
所以如果出了什么问题你可以
SQLException
扔了。这将包括一条消息,错误的可能原因。找到出路。。。好好享受!
dbf7pr2w2#
首先,你看到的提示
mysql>
表示mysql shell。这不是sql或jdbc,而是mysql提供的命令行接口。此mysql shell允许您执行:
sql语句。
不属于sql的各种其他语句。
您想要使用的JDBCAPI将允许您运行第一组语句——sql语句。不幸的是,它不允许你运行第二个,所以你对这个运气不佳。
另外,对于第一组,jdbcapi将提供错误代码和错误消息,它们与使用mysql shell时看到的不完全相同。
总之,您可以模拟其中的一些命令,但这与您可能期望的体验不完全相同。
然而。。。这是个大问题,你为什么要这么做?我的一个开发人员问我是否可以这样做,因为实现起来并不困难;这样我们就可以很容易地从web页面运行任何sql命令。伟大的?好。。。不,这是一个巨大的安全风险。如果有人入侵你的网页,你就暴露了整个数据库。
换句话说,不要将此代码部署到生产环境中。