我正在使用java来执行postgresql语句。在一个步骤中,我需要创建一个表,其中一列将存储文本块(可能包含标点符号,如逗号,分号等)。
我使用哪种数据类型来填充此列?
例如,在给定的示例中,我创建了一个名为“MYTHOUGHTS”的表,其中有一个名为“THOUGHTS”的列。我正在尝试以下代码:
try {
con = DriverManager.getConnection(url, user, password);
System.out.println("Opened Database Successfully");
st = con.createStatement();
String sql = "CREATE TABLE MYTHOUGHTS " + "(ID INT PRIMARY KEY NOT NULL," + " THOUGHTS TEXT NOT NULL," + " Number INT NOT NULL," + " ADDRESS CHAR(50), " + " SALARY REAL)";
st.executeUpdate(sql);
sql = "INSERT INTO COMPANY (ID,THOUGHTS,AGE,ADDRESS,SALARY) " + "VALUES (1," + "This is life, as I see it. Do you think otherwise?" + ", 32, 'California', 20000.00 );";
st.executeUpdate(sql);
st.close();
con.close();
}
catch (Exception e) {
e.printStackTrace();
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
我收到以下错误:
org.postgresql.util.PSQLException:错误:“生命”处或附近的语法错误 位置:68 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:331) 在com.vivek.PostgreSQLExample.main(PostgreSQLExample.java:39) org.postgresql.util.PSQLException:错误:“生命”处或附近的语法错误 位置:68
TEXT数据类型可能不合适。请告诉我如何在列中添加可能包含逗号和句点的多行文本。
感谢您的时间和帮助。非常感谢它。
答案 0 :(得分:3)
使用text
数据类型。内容无关紧要,唯一不能放入text
的是空字节\0
。
如果您遇到内容问题,那么您正在运行直接字符串插值的危险代码,而不是使用参数化语句。请参阅:http://bobby-tables.com/,http://en.wikipedia.org/wiki/SQL_injection,http://docs.oracle.com/javase/tutorial/jdbc/basics/