如何使用 postgreSQL 在 SQL 查询中输入真实值?

How to put a real values in SQL query using postgreSQL?

我在 Java 中开发的一个使用 postgreSQL 作为数据库的应用程序有一些问题。我设法进行了如下虚拟查询:

 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;

问题是当我创建自己的 VoiceMail class 并且当我从这种类型创建一个对象并在查询中放入该对象的 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 注入

的风险