Tag: prepared statement

使用java.sql.PreparedStatement将PDF文件上传到mysql BLOB而不会损坏

我尝试使用以下代码使用java.sql.PreparedStatement将pdf文件升级为mysql Blob字段。 File inFile = new File(“Path+BLOCK.pdf”); byte[] b = new byte[(int)inFile.length()]; PreparedStatement psmnt = (PreparedStatement) con.prepareStatement(“INSERT INTO 2012DOC (SRNO,DOCUMENT) VALUES (?,?)” ); //con is java.sql.Connection object psmnt.setString(1, “1200021”); psmnt.setBytes(2, b); psmnt.executeUpdate(); 此代码执行时没有错误,数据库显示blob内容,但是当我尝试使用下面的代码检索文件时,它会提供一个无法打开的损坏文件。 ResultSet rs=con.Execute(“SELECT DOCUMENT FROM 2012DOC”); rs.next(); response.setContentType(“application/pdf”); response.setHeader(“Content-Disposition”, “attachment; filename=kjsahkjd.pdf”); java.sql.Blob blob = rs.getBlob(“DOCUMENT”); ServletOutputStream servletOutputStream = response.getOutputStream(); InputStream in = blob.getBinaryStream(); […]

JDBC中的Java类型为Postgres ltree

有谁知道什么Java类型映射到Postgres ltree类型? 我像这样创建一个表: CREATE TABLE foo (text name, path ltree); 几个插页: INSERT INTO foo (name, path) VALUES ( ‘Alice’, ‘ROOT.first.parent’); INSERT INTO foo (name, path) VALUES ( ‘Bob’, ‘ROOT.second.parent’); INSERT INTO foo (name, path) VALUES ( ‘Ted’, ‘ROOT.first.parent.child’); INSERT INTO foo (name, path) VALUES ( ‘Carol’, ‘ROOT.second.parent.child’); 没什么奇怪的。 现在我想使用PreparedStatment批量处理它: public final String INSERT_SQL = “INSERT […]

带有CONTAINS查询的PreparedStatement

我有一个查询需要连续运行28 000次,所以我认为使用preparedStatement可能是一个聪明的主意。 这是我的查询: String requestWithFirstName = “SELECT SE.ELEMENT_ID, SE.LASTNAME||’ ‘||SE.FIRSTNAME AS ELEMENT, (SCORE(1)+SCORE(2))/2 AS SCORE ” + “FROM BL_SUSPICIOUS_ELEMENT SE ” + “WHERE CONTAINS(SE.LASTNAME, ‘fuzzy({‘ || ? || ‘},’ || ? || ‘,’ || ? || ‘, weight)’ , 1)>0 ” + “AND CONTAINS(SE.FIRSTNAME, ‘fuzzy({‘ || ? || ‘},’ || ? || ‘,’ || ? […]

PreparedStatement:如何使用JDBC将数据插入多个表

有人能告诉我是否第一个stmt.close(); 以下JDBC代码中是否需要针对两个不同的表执行两个不同的SQL查询? public class MyService { private Connection connection = null; public void save(Book book) { try { Class.forName(“com.mysql.jdbc.Driver”); connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb”, “root”, “password”); PreparedStatement stmt = connection.prepareStatement(“INSERT INTO PUBLISHER (CODE, PUBLISHER_NAME) VALUES (?, ?)”); stmt.setString(1, book.getPublisher().getCode()); stmt.setString(2, book.getPublisher().getName()); stmt.executeUpdate(); stmt.close(); //1 stmt = connection.prepareStatement(“INSERT INTO BOOK (ISBN, BOOK_NAME, PUBLISHER_CODE) VALUES (?, ?, ?)”); stmt.setString(1, […]

如何在JDBC预准备语句中转义文字问号(’?’)

我想创建一个JDBC PreparedStatement,如: SELECT URL,LOCATE ( ‘?’, URL ) pos FROM Links WHERE pageId=? ORDER BY pos ASC 哪一号? 是文字和第二? 是一个参数。 我可以使用CHAR(63)代替’?’ 但我认为额外的函数调用会减慢SQL执行速度。 有没有办法逃脱第一次? ? 编辑: 下面的代码测试dkatzel的断言是? 字符串中的字符不被视为标记: public class Test { public static void main(String[] args) throws SQLException { Connection conn = DriverManager.getConnection(“jdbc:h2:mem:test”); Statement stmt = conn.createStatement(); stmt.executeUpdate(“CREATE TABLE Links(URL VARCHAR(255) PRIMARY KEY,pageId BIGINT)”); stmt.executeUpdate(“INSERT […]

在方法之间重用PreparedStatement?

我们都知道 ,我们应该重新使用JDBC PreparedStatement不是在循环中创建新实例。 但是如何处理不同方法调用之间的PreparedStatement重用? 重用 – “规则”仍然有效吗? 我是否应该考虑为PreparedStatement使用字段,还是应该在每次调用时关闭并重新创建预准备语句(保持本地状态)? (当然,这样一个类的实例将绑定到一个Connection ,这在某些架构中可能是一个缺点) 我知道理想的答案可能是“它取决于”。 但我正在寻找经验不足的开发人员的最佳实践,他们将在大多数情况下做出正确的选择。

如何防止JSP中的SQL注入?

就在上周,我正在做一些PHP的东西。 我使用了一点解决方案来防止SQL注入。 PHP一直是我的人,它有3个解决方案可供使用(可能更多)。 一种是使用stripslashes()函数启用“魔术查询”。 另一个(推荐)是使用mysql_real_escape_string()函数。 那简单,我的问题就解决了。 但是,当谈到JSP时,事情似乎并不那么简单。 我搜索并没有找到任何内置函数来去除斜线或做那些事情(我相信这样的function可以使用基本的JAVA函数实现,但……)。 请帮我保护我的数据库。 我听说过PreparedStatement ,但是真的无法理解它? (我觉得新手的真正含义)。

使用java中的预准备语句插入自定义SQL类型

我有一些自定义类型。 它们基本上都是枚举。 以下是它们的示例: CREATE TYPE card_suit AS ENUM (‘spades’, ‘clubs’, ‘hearts’, ‘diamonds’); 我在Java中有一些准备好的语句,看起来像这样: // Setup stuff up here. sql = “INSERT INTO foo (suit) VALUES (?)”; st.setString(1, ‘spades’); st.executeUpdate(sql); Java给了我一些令人讨厌的例外: org.postgresql.util.PSQLException: ERROR: column “suit” is of type card_suit but expression is of type character varying Hint: You will need to rewrite or cast the expression. […]

JDBC – 如何在预准备语句中设置char

我找不到像这样的方法 char c =’c’; preparedStatement.setChar(1,c); 如何将字符设置为准备好的语句?

使用带有JDBCTemplate的预准备语句

我正在使用JDBC模板,并希望使用预准备语句从数据库中读取。 我在.csv文件中迭代多行,并在每一行上执行一些带有相应值的SQL select查询。 我想加快从数据库中读取数据,但我不知道如何让JDBC模板与预处理语句一起使用。 有PreparedStatementCreator和PreparedStatementSetter 。 在此示例中 ,它们都是使用匿名内部类创建的。 但是在PreparedStatementSetter类中,我无法访问我想在预准备语句中设置的值。 因为我正在迭代.csv文件,所以我不能将它们硬编码为String,因为我不知道它们。 我也无法将它们传递给PreparedStatementSetter,因为构造函数没有参数。 将我的价值观设定为最终值也是愚蠢的。 我习惯于创建准备好的语句非常简单。 就像是 PreparedStatement updateSales = con.prepareStatement( “UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? “); updateSales.setInt(1, 75); updateSales.setString(2, “Colombian”); updateSales.executeUpdate(): 就像在这个Java教程中一样 。