Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用postgreSQL在SQL查询中放入实值?_Java_Eclipse_Postgresql_Jdbc - Fatal编程技术网

Java 如何使用postgreSQL在SQL查询中放入实值?

Java 如何使用postgreSQL在SQL查询中放入实值?,java,eclipse,postgresql,jdbc,Java,Eclipse,Postgresql,Jdbc,我对使用postgreSQL作为数据库的Java开发的应用程序有一些问题。我成功地进行了如下虚拟查询: String sql = "INSERT INTO voicemessages (UNIQUEID,MSGNM,DIR,CONTEXT,MACROCONTEXT,CALLERID, ORIGTIME,DURATION, FLAG,MAILBOXUSER,MAILBOXCONTEXT,RECORDING, LABEL, read ) " + "VALUES

我对使用postgreSQL作为数据库的Java开发的应用程序有一些问题。我成功地进行了如下虚拟查询:

 String sql = "INSERT INTO voicemessages (UNIQUEID,MSGNM,DIR,CONTEXT,MACROCONTEXT,CALLERID, ORIGTIME,DURATION, FLAG,MAILBOXUSER,MAILBOXCONTEXT,RECORDING, LABEL, read ) "
                  + "VALUES (1, 1, 'dir/dir1/msgs', 'message', 'message', '6001', '15/01/2015 13:31:25', '1:32', 'flag', 'Georgi Georgiev', 'Georgi Georgiev', '12314124', 'some label', false);";
当我执行语句时,它工作得非常完美。在数据库中创建一行,我可以使用以下方式显示数据:

SELECT * FROM voicemessages;
问题是,当我创建自己的语音邮件类时,当我从该类型创建对象并将该对象的getter和setter放入查询时,我收到某种错误:

org.postgresql.util.PSQLException: ERROR: column "dir" does not exist Hint:There is a column named "dir" in table "voicemessages", but it cannot be referenced from this part of the query.Position: 169
我试图通过使用并执行以下命令插入一行:

String sql = "INSERT INTO voicemessages (UNIQUEID,MSGNM,DIR,CONTEXT,MACROCONTEXT,CALLERID, ORIGTIME,DURATION, FLAG,MAILBOXUSER,MAILBOXCONTEXT,RECORDING, LABEL, read ) "
                  + "VALUES (" + message01.getUniqueId() + ", " + message01.getMessageNumber() + ", " + message01.getDirectory() + ", " + message01.getContext() + ", " + message01.getMacroContext() + ", " + message01.getCallerId() + ", " +message01.getOrigTime() + ", " + message01.getDuration() + ", " + message01.getFlag() + ", " + message01.getMailboxUser() + ", " +message01.getMailboxContext() + ", " + message01.getRecording() + ", " + message01.getLabel() + ", " + message01.getRead()+ ");"+" ";
任何帮助或建议都将不胜感激。
提前谢谢你

不要使用直接值。出于安全考虑,请使用参数。发生的情况是,您传递的SQL语句将被数据库解析以准备和编译。因此,通过将实际SQL与参数分开发送,可以限制SQL注入的风险

您需要引用字符串。这个“,”+message01.getDirectory()+”,“将变成“,”,“+message01.getDirectory()+”,“不要创建这样的语句。使用
PreparedStatement
。不仅您当前的问题消失了,而且您也不会受到SQL注入的影响。非常感谢你们两位!引用解决了这个问题,现在我将尝试使用PreparetStatements代替: