Factory for creating Statements with unnamed parameters.
This class is primarily intended for framework developers who want to integrate the Spanner
client with a framework that uses unnamed parameters. Developers who want to use the Spanner
client in their application, should use named parameters.
Usage Example
Simple SQL query
Statementstatement=databaseClient.getStatementFactory().withUnnamedParameters("SELECT * FROM TABLE WHERE ID = ?",10L)
SQL query with multiple parameters
longid=10L;Stringname="google";List<String>phoneNumbers=Arrays.asList("1234567890","0987654321");Statementstatement=databaseClient.getStatementFactory().withUnnamedParameters("INSERT INTO TABLE (ID, name, phonenumbers) VALUES(?, ?, ?)",id,name,phoneNumbers)
How to use arrays with the IN operator
long[]ids={10L,12L,1483L};Statementstatement=databaseClient.getStatementFactory().withUnnamedParameters("SELECT * FROM TABLE WHERE ID = UNNEST(?)",ids)
This function accepts a SQL statement with unnamed parameters (?) and accepts a list of
objects that should be used as the values for those parameters. Primitive types are
supported.
For parameters of type DATE, the following types are supported
java.time.LocalDate
com.google.cloud.Date
For parameters of type TIMESTAMP, the following types are supported. Note that Spanner
stores all timestamps in UTC. Instances of ZonedDateTime and OffsetDateTime that use other
timezones than UTC, will be converted to the corresponding UTC values before being sent to
Spanner. Instances of LocalDateTime will be converted to a ZonedDateTime using the system
default timezone, and then converted to UTC before being sent to Spanner.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[],[],null,["# Class Statement.StatementFactory (6.98.1)\n\nVersion latestkeyboard_arrow_down\n\n- [6.98.1 (latest)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.98.0](/java/docs/reference/google-cloud-spanner/6.98.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.97.1](/java/docs/reference/google-cloud-spanner/6.97.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.96.1](/java/docs/reference/google-cloud-spanner/6.96.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.95.1](/java/docs/reference/google-cloud-spanner/6.95.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.94.0](/java/docs/reference/google-cloud-spanner/6.94.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.93.0](/java/docs/reference/google-cloud-spanner/6.93.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.89.0](/java/docs/reference/google-cloud-spanner/6.89.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.88.0](/java/docs/reference/google-cloud-spanner/6.88.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.87.0](/java/docs/reference/google-cloud-spanner/6.87.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.86.0](/java/docs/reference/google-cloud-spanner/6.86.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.85.0](/java/docs/reference/google-cloud-spanner/6.85.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.83.0](/java/docs/reference/google-cloud-spanner/6.83.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.82.0](/java/docs/reference/google-cloud-spanner/6.82.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.80.1](/java/docs/reference/google-cloud-spanner/6.80.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.79.0](/java/docs/reference/google-cloud-spanner/6.79.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.77.0](/java/docs/reference/google-cloud-spanner/6.77.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.74.1](/java/docs/reference/google-cloud-spanner/6.74.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.72.0](/java/docs/reference/google-cloud-spanner/6.72.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.71.0](/java/docs/reference/google-cloud-spanner/6.71.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.69.0](/java/docs/reference/google-cloud-spanner/6.69.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.68.0](/java/docs/reference/google-cloud-spanner/6.68.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.66.0](/java/docs/reference/google-cloud-spanner/6.66.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.65.1](/java/docs/reference/google-cloud-spanner/6.65.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.62.0](/java/docs/reference/google-cloud-spanner/6.62.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.60.0](/java/docs/reference/google-cloud-spanner/6.60.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.58.0](/java/docs/reference/google-cloud-spanner/6.58.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.57.0](/java/docs/reference/google-cloud-spanner/6.57.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.56.0](/java/docs/reference/google-cloud-spanner/6.56.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.55.0](/java/docs/reference/google-cloud-spanner/6.55.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.54.0](/java/docs/reference/google-cloud-spanner/6.54.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.53.0](/java/docs/reference/google-cloud-spanner/6.53.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.52.1](/java/docs/reference/google-cloud-spanner/6.52.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.51.0](/java/docs/reference/google-cloud-spanner/6.51.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.50.1](/java/docs/reference/google-cloud-spanner/6.50.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.49.0](/java/docs/reference/google-cloud-spanner/6.49.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.25.1](/java/docs/reference/google-cloud-spanner/6.25.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.24.0](/java/docs/reference/google-cloud-spanner/6.24.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.23.4](/java/docs/reference/google-cloud-spanner/6.23.4/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.22.0](/java/docs/reference/google-cloud-spanner/6.22.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.21.2](/java/docs/reference/google-cloud-spanner/6.21.2/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.20.0](/java/docs/reference/google-cloud-spanner/6.20.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.19.1](/java/docs/reference/google-cloud-spanner/6.19.1/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.18.0](/java/docs/reference/google-cloud-spanner/6.18.0/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.17.4](/java/docs/reference/google-cloud-spanner/6.17.4/com.google.cloud.spanner.Statement.StatementFactory)\n- [6.14.1](/java/docs/reference/google-cloud-spanner/6.14.1/com.google.cloud.spanner.Statement.StatementFactory) \n\n public static final class Statement.StatementFactory\n\nFactory for creating [Statement](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.Statement)s with unnamed parameters.\n\nThis class is primarily intended for framework developers who want to integrate the Spanner\nclient with a framework that uses unnamed parameters. Developers who want to use the Spanner\nclient in their application, should use named parameters.\n\n\nUsage Example\n-------------\n\nSimple SQL query \n\n\n Statement statement = databaseClient.getStatementFactory()\n .withUnnamedParameters(\"SELECT * FROM TABLE WHERE ID = ?\", 10L)\n \nSQL query with multiple parameters \n\n\n long id = 10L;\n String name = \"google\";\n List\u003cString\u003e phoneNumbers = Arrays.asList(\"1234567890\", \"0987654321\");\n Statement statement = databaseClient.getStatementFactory()\n .withUnnamedParameters(\"INSERT INTO TABLE (ID, name, phonenumbers) VALUES(?, ?, ?)\", id, name, phoneNumbers)\n \nHow to use arrays with the IN operator \n\n\n long[] ids = {10L, 12L, 1483L};\n Statement statement = databaseClient.getStatementFactory()\n .withUnnamedParameters(\"SELECT * FROM TABLE WHERE ID = UNNEST(?)\", ids)\n \nSee Also: [DatabaseClient#getStatementFactory()](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.DatabaseClient#com_google_cloud_spanner_DatabaseClient_getStatementFactory__), StatementFactory#withUnnamedParameters(String, Object...) \n\nInheritance\n-----------\n\n[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e Statement.StatementFactory \n\nInherited Members\n-----------------\n\n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nMethods\n-------\n\n### of(String sql)\n\n public Statement of(String sql)\n\n### withUnnamedParameters(String sql, Object\\[\\] values)\n\n public Statement withUnnamedParameters(String sql, Object[] values)\n\nThis function accepts a SQL statement with unnamed parameters (?) and accepts a list of\nobjects that should be used as the values for those parameters. Primitive types are\nsupported.\n\nFor parameters of type DATE, the following types are supported\n\n- java.time.LocalDate\n- com.google.cloud.Date\n\nFor parameters of type TIMESTAMP, the following types are supported. Note that Spanner\nstores all timestamps in UTC. Instances of ZonedDateTime and OffsetDateTime that use other\ntimezones than UTC, will be converted to the corresponding UTC values before being sent to\nSpanner. Instances of LocalDateTime will be converted to a ZonedDateTime using the system\ndefault timezone, and then converted to UTC before being sent to Spanner.\n\n- java.time.LocalDateTime\n- java.time.OffsetDateTime\n- java.time.ZonedDateTime\n\n\nSee Also: [DatabaseClient#getStatementFactory](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.DatabaseClient#com_google_cloud_spanner_DatabaseClient_getStatementFactory_)"]]