如何使用channel.connect();



这是我尝试插入远程数据库表的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 *"查询,而是用于"插入查询",它执行完美,我得到了输出。但是在这种情况下,事实并非如此。请帮助我找到解决方案。

您需要用 "逃脱双引号,因为双引号用作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");

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

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使用双引号来界定字符串。

相关内容

  • 没有找到相关文章

最新更新