0

这是我尝试插入远程数据库表的 java 代码。

session.connect();
Channel channel = session.openChannel("exec");

String query = "INSERT INTO table_name
(id,serialno,userid,checktime,checktype,eventType) 
VALUES(502,1011,0078,'2017-04-17 17:27:51',6,23)";

((ChannelExec) channel).setCommand("mysql -uuser -ppwd -h localhost -e'" + 
query + "' database_name");
    InputStream in = channel.getInputStream();
    channel.connect();

我使用相同的代码来执行“select *”查询,而不是“插入查询”它完美地执行并且我得到了输出。但在这种情况下,它没有。请帮我找到解决方案。

4

2 回答 2

0

您是否在命令行上尝试过相同的命令?

mysql -uuser -ppwd -h localhost -e'INSERT INTO table_name (id,serialno,userid,checktime,checktype,eventType) VALUES(502,1011,0078,'2017-04-17 17:27:51',6,23)' database_name

它也行不通。命令中的INSERT引号与命令行中包含 SQL 命令的引号冲突。

一种方法是在命令行上使用双引号:

mysql -uuser -ppwd -h localhost -e"INSERT INTO table_name (id,serialno,userid,checktime,checktype,eventType) VALUES(502,1011,0078,'2017-04-17 17:27:51',6,23)" database_name

然后在 Java 中,您必须将那些双引号转义为\",因为 Java 使用双引号来分隔字符串。

于 2017-04-28T13:19:59.133 回答
0

您需要使用 转义双引号 \",因为双引号在 Java 中用作分隔符。

String query = "INSERT INTO table_name
(id,serialno,userid,checktime,checktype,eventType) 
VALUES(502,1011,0078,'2017-04-17 17:27:51',6,23)"                

((ChannelExec) channel).setCommand("mysql -uroot -proot -h localhost -e\"" + query + "\" yourdbname");
于 2017-05-03T06:31:29.827 回答