如何从MySQL发送和接收原始字符串

如何从MySQL发送和接收原始字符串,mysql,jdbc,server,Mysql,Jdbc,Server,我正在开发一个类似SQL开发人员的应用程序,在这个应用程序中,用户输入一些SQL命令,服务器的结果显示在一个on网页上 问题是,用户可以输入任何字符串,有效或无效的SQL,例如,如果用户从employees发送select*;我想接收并显示在 全文如下: +---------+----------+---------------+----------+ | user_id | username | full_name | password | +---------+----------+

我正在开发一个类似SQL开发人员的应用程序,在这个应用程序中,用户输入一些SQL命令,服务器的结果显示在一个on网页上

问题是,用户可以输入任何字符串,有效或无效的SQL,例如,如果用户从employees发送select*;我想接收并显示在 全文如下:

+---------+----------+---------------+----------+
| user_id | username | full_name     | password |
+---------+----------+---------------+----------+
|       1 | john     | John Doe      | admin    |
当他输入错误的SQL字符串时,消息应该是标准的MySQL错误字符串,例如:

mysql> select * from usrsss;
ERROR 1146 (42S02): Table 'mydb.usrsss' doesn't exist
我知道安全风险,我现在不关心它


这可以做到吗,因为我无法控制用户发送的SQL字符串语法?

首先,您在那里看到的提示mysql>表示mysql Shell。这不是SQL或JDBC,而是MySQL提供的命令行接口

此MySQL Shell允许您执行:

SQL语句。 不属于SQL的各种其他语句。 您想要使用的JDBCAPI将允许您运行第一组语句—SQL语句。不幸的是,它不允许您运行第二个,因此您在这一个方面运气不佳

另外,对于第一组,JDBCAPI将提供错误代码和错误消息,这些代码和消息与您在使用MySQL Shell时看到的不完全相同

总之,您可以模拟其中的一些命令,但这将不是您可能期望的完全相同的体验

然而。。。这是个大问题,你为什么要这么做?我的一个开发者问我他是否能做到这一点,因为实现起来并不困难;通过这种方式,我们可以轻松地从web页面运行任何SQL命令。伟大的好不,这是一个巨大的安全风险。如果有人入侵你的网页,你将暴露整个数据库

换句话说,不要将此代码部署到生产环境中。

如果您使用的是java.sql.Connection

首先使用.createStatement创建语句。 使用.executeQuery进行搜索 和.executeUpdate以进行插入、更新和删除 搜索时,标识要创建表的列数

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

.getColumnCount将为您提供列计数。 在for循环中创建列,同时创建.getColumnNameint索引将为您提供列名。 创建表后,迭代结果集

使用上述方法获取值,并向表中添加行

别忘了在代码块周围加上

try{

} catch(Exception e){
     e.getMessage();
}
因此,如果出现任何问题,可以抛出SQLException。这将包括一条消息,即错误的可能原因


找到你的出路。。。享受吧

为什么不能呢?您可能会问我们是否可以在SQL数据库上执行SQL查询。是的,可以。使用execute要简单得多。。因为这可以用于所有类型的语句,即使是那些产生多个结果和更新计数的语句。OP表示,他们不关心安全风险。因此,你应该解释,不仅仅是安全性受到威胁。整个数据库本身就岌岌可危!
try{

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