Tag: prepared statement

当我说准备好的声明是预编译的时候意味着什么?

我在Java使用MySQL 。 我对PreparedStatement没有很好的理解。 我知道使用PreparedStatement比使用PreparedStatement更好。 原因是它被编译。 编译是什么意思?

关闭Connection会自动关闭语句和结果集吗?

我知道Java中的安全模式是在finally块中按顺序关闭ResultSet,Statement和Connection。 如果你关闭连接然后尝试关闭语句(不抛出exception)。 但是,如果您尝试从语句中调用任何方法,则会抛出exception。 我想知道关闭连接会自动关闭从该连接创建的所有语句对象吗? 更新: 我使用的是DatabaseProductVersion:Oracle Database 11g 11.1.0.0.0版 DriverName:Oracle JDBC驱动程序 DriverVersion:10.2.0.4.0

传递表名作为预处理语句的参数

我正在尝试学习如何在Java中使用MySQL,正如标题所说,我在准备语句时遇到问题。 我有一个名为temp的MySQL表,其中包含值(直接从MySQL控制台输出): mysql> select * from temp; +——+———————————————–+ | id | value | +——+———————————————–+ | 1 | this is a first item | | 2 | this is the second item | | 3 | This is the third item and slightly redundant | +——+———————————————–+ 3 rows in set (0.00 sec) 在Java中,我正在访问数据库,如下所示: stmt = conn.prepareStatment(“select […]

使用PreparedStatement插入。 如何自动递增ID?

我有一个PreparedStatement,例如: PreparedStatement preparedStatement = connect.prepareStatement(“INSERT into employee (id, time, name” + “(?,?,?)”,Statement.RETURN_GENERATED_KEYS); ResultSet tableKeys = preparedStatement.getGeneratedKeys(); preparedStatement.executeUpdate(); tableKeys.next(); int autoGeneratedID = tableKeys.getInt(1); preparedStatement.setInt(1,autoGeneratedID); preparedStatement.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime())); preparedStatement.setString(3, “Test”); preparedStatement.executeUpdate(); 如您所见,Employee表具有自动递增的ID。 我需要基本上使用preparedStatement自动添加它。 谁能告诉我哪里出错了并纠正我? 现在它只是给我一个与Statement相关的错误。

PreparedStatement.addBatch()可用于SELECT查询吗?

想象一下,我有100个SELECT查询,这些查询因一个输入而不同。 PreparedStatement可用于该值。 我在Web上看到的所有文档都是批量插入/更新/删除。 我从未见过用于select语句的批处理。 可以这样做吗? 如果是这样,请在下面的示例代码中帮助我。 我想这可以使用“IN”子句来完成,但我更喜欢使用批处理的select语句。 示例代码: public void run(连接db_conn,List value_list){ String sql =“SELECT * FROM DATA_TABLE WHERE ATTR =?”; PreparedStatement pstmt = db_conn.prepareStatement(sql); for(String value:value_list){ pstmt.clearParameters(); pstmt.setObject(1,value); pstmt.addBatch(); } //我在这里打电话给什么? int [] result_array = pstmt.executeBatch() while(pstmt.getMoreResults()){ ResultSet result_set = pstmt.getResultSet(); //在这里工作 } } 我想这也可能是依赖于驱动程序的行为。 我正在使用他们的JDBC驱动程序编写针对IBM AS / 400 DB2数据库的查询。

如何在准备好的语句中设置参数列表?

我有一个名单,例如: List names = … names.add(‘charles’); … 并声明: PreparedStatement stmt = conn.prepareStatement(‘select * from person where name in ( ? )’); 如何做到以下几点: stmt.setParameterList(1,names); 有解决方法吗? 谁能解释为什么这种方法丢失了? 使用:java,postgresql,jdbc3

在批处理中使用JDBC preparedStatement

我使用Statement的批处理来查询我的数据库。 我现在做了一些研究,我想重写我的应用程序以使用preparedStatement但我很难弄清楚如何向prepareStatement批处理添加查询。 这就是我现在正在做的事情: private void addToBatch(String sql) throws SQLException{ sttmnt.addBatch(sql); batchSize++; if (batchSize == elementsPerExecute){ executeBatches(); } } 其中sttmnt是Statement类型的类成员。 我想要做的是使用preparedStatement的setString(int, String)方法设置一些动态数据,然后将其添加到批处理中。 不幸的是,我不完全理解它是如何工作的,以及如何将setString(int, String)用于批处理中的特定sql,或者为我拥有的每个sql创建一个新的preparedStatemnt ,然后将它们全部连接到一个批处理。 有可能这样做吗? 或者我是否真的错过了对preparedStatement理解?

PreparedStatement抛出语法错误

我正在使用PreparedStatements准备一个查询,当我用条件参数硬编码查询时它运行正常。 如果参数是从setString()方法传递的,则抛出错误。 com.mysql.jdbc.JDBC4PreparedStatement@2cf63e26: select * from linkedin_page_mess ages where company_id = ‘2414183’ com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘?’ at line 1 在错误日志中,我的查询上面看起来很好。 public JSONObject getLinkedInMessages(String compId) { linlogger.log(Level.INFO, “Called getLinkedInMessages method”); Connection conn = […]

Java Crosstab – preparedstatement查询

我有一个典型的交叉表查询与静态参数。 它适用于createStatement。 我想使用preparestatement来查询。 String query = “SELECT * FROM crosstab( ‘SELECT rowid, a_name, value FROM test WHERE a_name = ”att2” OR a_name = ”att3” ORDER BY 1,2’ ) AS ct(row_name text, category_1 text, category_2 text, category_3 text);”; PreparedStatement stat = conn.prepareStatement(query); ResultSet rs = stat.getResultSet(); stat.executeQuery(query); rs = stat.getResultSet(); while (rs.next()) { //TODO } 但它似乎没有用。 […]

“if(rs.next())”是什么意思?

我目前收到错误, java.sql.SQLException: Method ‘executeQuery(String)’ not allowed on prepared statement. 因为我正在使用 PreparedStatement stmt = conn.prepareStatement(sql); 并且也有 ResultSet rs = stmt.executeQuery(sql); 在我的代码中。 我现在需要删除ResultSet行,但这使我不得不处理以下代码: if (rs.next()) { messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(“login.successful”)); request.getSession(true).setAttribute(“USERNAME”, rs.getString(“USERNAME”)); request.getSession(true).setAttribute(“BALANCE”, rs.getString(“BALANCE”)); request.setAttribute(“msg”, “Logged in successfully”); 我不确定我完全明白什么 if (rs.next()) 确实。 有人可以向我解释这段代码吗? 如果我对此有了更好的理解,我相信我会更好地了解如何使用PreparedStatement结果和rs用于逻辑。 此外,任何有助于改变逻辑的帮助也将受到高度赞赏。