正在开发一个小东西,需要俩个不同的数据库DB_A和DB_B(不同的实例),都是Oracle的
在库DB_A中的一个表A根据条件查出主键有1,2,3,4,5,6
拼好后为"1,2,3,4,5,6"
再在第二个库DB_B中的B表中把上面拼的字符串作为in的参数,如下
String in_data="1,2,3,4,5,6";
pst =
conn.prepareStatement("select id,name from B where id in ? ");
pst.setString(1,"("+in_data+")");
发现查不出记录,我又试
String in_data="1,2,3,4,5,6";
pst =
conn.prepareStatement("select id,name from B where id in ( ? )");
pst.setString(1,in_data);
还是不出记录,我再试
String in_data="1";
pst =
conn.prepareStatement("select id,name from B where id in ( ? )");
pst.setString(1,in_data);
终于出来了id=1的记录,似乎明白了点啥么
PrepareStatement是动态设定参数的,
也就是现在生成select id,name from B where id in ( ? )
一个?代表一个参数,pst.setString(1,"1,2,3,4,5,6"),
就相当于select id,name from B where id in ( '1,2,3,4,5,6' ),
没有id为'1,2,3,4,5,6'的记录,当然查不出来啦
但是由于我的in_data是根据条件动态改变的,由于俩查询在不同的DB实例中,所以用子查询是不行的;而用PrepareStatement设置in参数的时候就不能确定到底是用几个"?"
最后只好用Statement拼字符串了,不知道各位有啥好办法
分享到:
相关推荐
prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要通过 Connection 对象的 createStatement...
在批量处理数据时,PrepareStatement提供了`addBatch()`方法,可以将多条SQL语句添加到批处理队列中,最后通过`executeBatch()`一次性执行。这在插入大量数据时非常有效。例如,批量插入用户记录: ```java String ...
MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name [USING @var_name [, @var_name] …]; /*执行预处理语句*/ {DEALLOCATE | DROP} PREPARE statement_...
参数化查询允许将变量值插入到SQL语句中,而不是直接将它们拼接到字符串中。问号是大多数数据库系统用来表示这些参数的占位符。例如,以下是一个简单的参数化SELECT语句: ```sql SELECT * FROM Users WHERE ...
"hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...
PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, 10); ``` 在这个例子中,我们想知道实际执行的SQL语句是"SELECT * FROM table WHERE id = 10"。为了实现这个需求,我们可以自定义一个辅助...
创建PreparedStatement对象需要通过Connection接口的prepareStatement()方法,传入SQL语句作为参数。例如: ```java Connection conn = DriverManager.getConnection(url, username, password); ...
要创建一个 `PreparedStatement` 对象,首先需要通过 `Connection` 对象调用 `prepareStatement` 方法,并传入一个 SQL 语句字符串。例如: ```java // 假设 con 是已建立的 Connection 对象 String sql = "UPDATE ...
在Java的JDBC编程中,`PreparedStatement`是一个非常重要的接口,它用于预编译SQL语句,提高了数据库操作的效率和安全性。当我们处理大量重复的SQL操作时,使用`PreparedStatement`可以避免SQL注入等问题,同时提升...
本文将深入探讨如何在程序中结合SQL语句结构,动态地实现SQL多条件查询,以提高开发效率并减少代码重复。我们将通过一个具体的示例,基于标签“SanYe”来阐述这一主题。 首先,理解SQL语句的基本结构是关键。一个...
- **解释**:使用`PreparedStatement`对象预编译SQL语句,允许参数化查询,提高效率并防止SQL注入攻击。在此示例中,`?`用作占位符,之后通过`setInt`和`setString`方法设置具体值。 ##### 2. `UPDATE`语句基础 - ...
在IT领域,特别是数据库操作与查询方面,SQL语句的动态构建是一项非常实用且重要的技能。根据提供的文件信息,我们可以深入探讨如何通过条件拼接来构造SQL查询语句,这在实际开发中极为常见。 ### SQL语句拼接的...
在实际开发过程中,为了实现动态SQL查询的功能,开发者常常需要根据不同的条件来构造SQL语句。这种根据条件动态生成SQL的过程就被称为SQL语句拼接。这种方式尤其适用于那些查询条件不确定或可变的场景,例如用户可以...
### SQL语句大全详解 #### 一、概述 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。本文档提供了一套全面的SQL语句及其用法,适用于MySQL、Oracle和SQL Server等主流数据库系统。这些SQL...
在Java编程中,连接数据库并执行SQL语句是常见的任务,而`JDBC`(Java Database Connectivity)就是实现这一目标的接口和API。本篇将深入讲解如何在使用JDBC时,通过统一的方式设置SQL语句中的参数,提高代码的...
"JDBC的动态SQL语句在浏览器_服务器模式中的应用.pdf" JDBC(Java Database ...JDBC的动态SQL语句在浏览器/服务器模式中的应用可以提高应用程序的灵活性和可维护性,但是需要正确地使用这种技术来避免安全性问题。
具体操作方式为,首先使用PREPARE语句从SQL语句模板创建动态阶段区,然后使用EXECUTE执行带参数的SQL语句,例如:PREPARE DynamicStagingArea FROM SQLStatement USING TransactionObject; EXECUTE ...
此外,使用动态SQL语句还可以在程序中根据不同情况动态地生成不同的查询语句,从而提高程序的灵活性和适应性。但同时,动态SQL的使用也增加了编程的复杂度和调试的难度,因此需要程序员在实际开发中权衡利弊。 文章...
根据提供的信息,我们可以总结出以下详细的SQL知识点...以上是SQL语句的一些基础和进阶知识点,涵盖了数据操作、数据定义、数据控制、事务控制以及程序化SQL等方面。这些知识对于学习和使用SQL进行数据库管理非常重要。
本文将深入探讨如何使用C++与SQL Server交互,并通过SQL语句查询数据库中的内容。 首先,要实现C++与SQL Server的连接,我们需要一个中间库来处理底层的通信和数据转换。ODBC(Open Database Connectivity)和ADO...