这是我尝试插入远程数据库表的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 *”查询,而不是“插入查询”它执行完美,我得到了输出。但在这种情况下它没有。请帮我找到解决方案。
答案 0 :(得分: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使用双引号来分隔字符串。
答案 1 :(得分: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");