Tag: prepared statement

准备好的声明不会逃避撇号

我正在使用从hibernate获取的JDBC连接对象来执行浴更新,我这样做是因为我需要使用MySql ON DUPLICATEfunction。 但是,当试图插入时,我无法插入说字符串有特殊字符, Session session = sessionFactory.openSession(); PreparedStatement pstm = null; Connection conn = session.connection(); try { IRKeyWordTweet record = null; conn.setAutoCommit(false); for (Iterator itrList = statusToInsert.iterator(); itrList.hasNext();) { try { record = (IRKeyWordTweet) itrList.next(); pstm = (PreparedStatement) conn.prepareStatement(“INSERT QUERY”); System.err.println(record.getTwtText()); //tweetId pstm.setLong(1, record.getTweetId()); Setters For Prepared statement…. pstm.addBatch(); int[] updateCounts = pstm.executeBatch(); } […]

Tomcat中的PreparedStatement缓存

我正在寻找一种实现PreparedStatement缓存的方法,以便为过去已经执行的查询保存重新创建PreparedStatement对象。 有没有一些内置的方法来实现这个使用Tomcat? 或者我必须自己编程此缓存吗?

准备好的语句和JDBC驱动程序

我在Java中的准备语句中有以下问题。 当SQL Query没有任何Where子句时,使用Prepared Statements是否有益? 假设一个简单的查询Select * from tablename; 据说Prepared Statement被编译一次,只有值被第二次替换。 因此,它可以更快,因为可以跳过查询validation和编译步骤。 编译表格存储在哪里? 这个编译表格的生命周期是多少?

ResultSet的Oracle JDBC性能

到目前为止,我一直在使用这样的查询我的数据库工作得非常好: PreparedStatement prepStmt = dbCon.prepareStatement(mySql); ResultSet rs = prepStmt.executeQuery(); 但后来我需要使用rs.first(); 为了能够多次迭代我的rs 。 所以我现在用 PreparedStatement prepStmt = dbCon.prepareStatement(mySql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 我的问题与两者的表现有关。 如果我使用第二个选项,我会失去什么? 使用第二个选项会对我到目前为止编写的代码产生任何负面影响吗? PS:请注意,我的应用程序是一个使用后端Oracle 11g数据库的多用户,数据库密集型Web应用程序(在Weblogic 10.3.4上)。 谢谢大家的关注。 UPDATE 我的最大重新设置大小将小于1000行和15-20列

为什么我需要连接来创建PreparedStatements?

出于多种原因 ,我想使用准备好的陈述。 但是,我想创建一个如下所示的方法: /* This opens a connection, executes the query, and closes the connection */ public static void executeNonQuery(String queryString); 换句话说,我希望我的应用程序逻辑只需要制定查询和feed参数,而不是处理连接和语句。 但是,PreparedStatements是从连接对象创建的,所以我当前被迫使用String.format()准备查询字符串 – 但是很丑陋且危险。 有没有办法在不使用String.format()的情况下做我想做的事情?

为什么Hibernate内联传递给JPA Criteria Query的整数参数列表?

我正在使用JPA Criteria API构建查询。 当我使用javax.persistence.criteria.Path#in(Collection)方法创建两个限制谓词时,生成的SQL查询与我所考虑的略有不同。 构建在int属性上的第一个谓词生成了SQL,内联参数集合的所有元素: in (10, 20, 30) 。 构建在String属性上的第二个谓词产生了参数化的SQL: in (?, ?, ?) 。 让我展示: 实体: @Entity public class A { @Id private Integer id; private int intAttr; private String stringAttr; //getter/setters } 查询: CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery q = cb.createQuery(A.class); Root root = q.from(A.class); q.where( root.get(“intAttr”).in(Arrays.asList(10, 20, 30)), root.get(“stringAttr”).in(Arrays.asList(“a”, “b”, “c”)) […]

在一个事务中执行两个不同的查询

我试图在一个Statement执行两个插入查询,将它们放在一个事务中。 我正在查看addBatch方法,但如果我理解正确,它可以与单个PreparedStatement一起使用,使用不同的参数多次执行相同的插入,或者在Statement对象上使用以向批处理添加更多查询,但没有添加参数的能力(所以我可能能够在sql字符串中添加值.SQL注入风格)。 我也试过一种简单的方法,在一个sql语句中写入两个插入( insert into table1 values(?, ?); insert into table2 values(?, ?); ),但这样PreparedStatement只能看到前两个参数,并且试图设置第3和第4次抛出exception。

准备好的声明和声明/查询缓存

我试图理解语句缓存在参数化预准备语句的情况下是否有用。 据我所知 如果我使用缓存,那么查询将根据其“字符串”进行缓存。 在这种情况下,如果查询具有不同的参数值,则它是一个不同的/新的语句/字符串wrt缓存。 此外,当参数更改时,结果也会发生变化。 由于准备好的语句是参数化的,因此在这种情况下使用缓存真的很有用。 我正在使用JDBC / Snaq DB Pool / MySQL数据库。 语句缓存在这里涉及两种不同的情况: JAVA:Snaq DB池提供了ConnectionCache类,它有助于缓存语句。 MySQL:DB还提供了缓存查询和结果的方法。 http://dev.mysql.com/doc/refman/5.1/en/query-cache.html 我的困惑很简单: 如果我要在缓存中搜索查询/对应结果,我将根据字符串比较进行搜索。 如果参数值发生变化,查询字符串也会发生变化。 这将导致具有不同参数值的相同查询的高速缓存中的不同条目。 希望我澄清一下我的问题。

SQL注入 – 如何在java中使用preparedstatement

我有一个动态构建的SQL,以下是查询: private String constructTownSearchQuery(String country, String stateName,String districtName,String townName) { StringBuilder statesSearchQuery = new StringBuilder(); statesSearchQuery.append(” select cntry.countryid,cntry.country,sta.stateid,sta.state,dst.districtid,dst.district,twn.townid,twn.town “); statesSearchQuery.append(” from m_countries as cntry,m_states as sta,m_districts as dst,m_towns as twn “); statesSearchQuery.append(” where cntry.countryid = sta.countryid “); statesSearchQuery.append(” and sta.stateid = dst.stateid “); statesSearchQuery.append(” and twn.districtid=dst.districtid “); if (!country.equals(“”)) { statesSearchQuery.append(” and cntry.country='”).append(country).append(“‘ “); } […]

PreparedStatements的最佳实践; 何时何时不去

我最近已经开始在Web应用程序中再次使用预准备语句,并且我知道不鼓励对所有事务使用预准备语句。 我不知道的是什么时候最好使用准备好的陈述。 我已经阅读了何时使用而不使用它们,但没有一个例子真正说明了使用它们的最佳实践。 我试图弄清楚我应该使用哪些数据库调用以及哪些不应该使用。 例如,MySQL网站在下一页的“何时使用预准备语句”中提到它准备语句-MySQL