A SQL statement and optional bound parameters that can be executed in a ReadContext.
The SQL query string can contain parameter placeholders. A parameter placeholder consists of
@ followed by the parameter name. Parameter names consist of any combination of
letters, numbers, and underscores.
Parameters can appear anywhere that a literal value is expected. The same parameter name can
be used more than once, for example: WHERE id > @msg_id AND id < @msg_id + 100
It is an error to execute an SQL query with placeholders for unbound parameters.
Statements are constructed using a builder. Parameter values are specified by calling Builder#bind(String). For example, code to build a query using the clause above and bind a value
to id might look like the following:
Statementstatement=Statement.newBuilder("SELECT name WHERE id > @msg_id AND id < @msg_id="" +="" 100")="".bind("msg_id").to(500)="".build();="">
[[["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 (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)\n- [6.98.0](/java/docs/reference/google-cloud-spanner/6.98.0/com.google.cloud.spanner.Statement)\n- [6.97.1](/java/docs/reference/google-cloud-spanner/6.97.1/com.google.cloud.spanner.Statement)\n- [6.96.1](/java/docs/reference/google-cloud-spanner/6.96.1/com.google.cloud.spanner.Statement)\n- [6.95.1](/java/docs/reference/google-cloud-spanner/6.95.1/com.google.cloud.spanner.Statement)\n- [6.94.0](/java/docs/reference/google-cloud-spanner/6.94.0/com.google.cloud.spanner.Statement)\n- [6.93.0](/java/docs/reference/google-cloud-spanner/6.93.0/com.google.cloud.spanner.Statement)\n- [6.89.0](/java/docs/reference/google-cloud-spanner/6.89.0/com.google.cloud.spanner.Statement)\n- [6.88.0](/java/docs/reference/google-cloud-spanner/6.88.0/com.google.cloud.spanner.Statement)\n- [6.87.0](/java/docs/reference/google-cloud-spanner/6.87.0/com.google.cloud.spanner.Statement)\n- [6.86.0](/java/docs/reference/google-cloud-spanner/6.86.0/com.google.cloud.spanner.Statement)\n- [6.85.0](/java/docs/reference/google-cloud-spanner/6.85.0/com.google.cloud.spanner.Statement)\n- [6.83.0](/java/docs/reference/google-cloud-spanner/6.83.0/com.google.cloud.spanner.Statement)\n- [6.82.0](/java/docs/reference/google-cloud-spanner/6.82.0/com.google.cloud.spanner.Statement)\n- [6.80.1](/java/docs/reference/google-cloud-spanner/6.80.1/com.google.cloud.spanner.Statement)\n- [6.79.0](/java/docs/reference/google-cloud-spanner/6.79.0/com.google.cloud.spanner.Statement)\n- [6.77.0](/java/docs/reference/google-cloud-spanner/6.77.0/com.google.cloud.spanner.Statement)\n- [6.74.1](/java/docs/reference/google-cloud-spanner/6.74.1/com.google.cloud.spanner.Statement)\n- [6.72.0](/java/docs/reference/google-cloud-spanner/6.72.0/com.google.cloud.spanner.Statement)\n- [6.71.0](/java/docs/reference/google-cloud-spanner/6.71.0/com.google.cloud.spanner.Statement)\n- [6.69.0](/java/docs/reference/google-cloud-spanner/6.69.0/com.google.cloud.spanner.Statement)\n- [6.68.0](/java/docs/reference/google-cloud-spanner/6.68.0/com.google.cloud.spanner.Statement)\n- [6.66.0](/java/docs/reference/google-cloud-spanner/6.66.0/com.google.cloud.spanner.Statement)\n- [6.65.1](/java/docs/reference/google-cloud-spanner/6.65.1/com.google.cloud.spanner.Statement)\n- [6.62.0](/java/docs/reference/google-cloud-spanner/6.62.0/com.google.cloud.spanner.Statement)\n- [6.60.0](/java/docs/reference/google-cloud-spanner/6.60.0/com.google.cloud.spanner.Statement)\n- [6.58.0](/java/docs/reference/google-cloud-spanner/6.58.0/com.google.cloud.spanner.Statement)\n- [6.57.0](/java/docs/reference/google-cloud-spanner/6.57.0/com.google.cloud.spanner.Statement)\n- [6.56.0](/java/docs/reference/google-cloud-spanner/6.56.0/com.google.cloud.spanner.Statement)\n- [6.55.0](/java/docs/reference/google-cloud-spanner/6.55.0/com.google.cloud.spanner.Statement)\n- [6.54.0](/java/docs/reference/google-cloud-spanner/6.54.0/com.google.cloud.spanner.Statement)\n- [6.53.0](/java/docs/reference/google-cloud-spanner/6.53.0/com.google.cloud.spanner.Statement)\n- [6.52.1](/java/docs/reference/google-cloud-spanner/6.52.1/com.google.cloud.spanner.Statement)\n- [6.51.0](/java/docs/reference/google-cloud-spanner/6.51.0/com.google.cloud.spanner.Statement)\n- [6.50.1](/java/docs/reference/google-cloud-spanner/6.50.1/com.google.cloud.spanner.Statement)\n- [6.49.0](/java/docs/reference/google-cloud-spanner/6.49.0/com.google.cloud.spanner.Statement)\n- [6.25.1](/java/docs/reference/google-cloud-spanner/6.25.1/com.google.cloud.spanner.Statement)\n- [6.24.0](/java/docs/reference/google-cloud-spanner/6.24.0/com.google.cloud.spanner.Statement)\n- [6.23.4](/java/docs/reference/google-cloud-spanner/6.23.4/com.google.cloud.spanner.Statement)\n- [6.22.0](/java/docs/reference/google-cloud-spanner/6.22.0/com.google.cloud.spanner.Statement)\n- [6.21.2](/java/docs/reference/google-cloud-spanner/6.21.2/com.google.cloud.spanner.Statement)\n- [6.20.0](/java/docs/reference/google-cloud-spanner/6.20.0/com.google.cloud.spanner.Statement)\n- [6.19.1](/java/docs/reference/google-cloud-spanner/6.19.1/com.google.cloud.spanner.Statement)\n- [6.18.0](/java/docs/reference/google-cloud-spanner/6.18.0/com.google.cloud.spanner.Statement)\n- [6.17.4](/java/docs/reference/google-cloud-spanner/6.17.4/com.google.cloud.spanner.Statement)\n- [6.14.1](/java/docs/reference/google-cloud-spanner/6.14.1/com.google.cloud.spanner.Statement) \n\n public final class Statement implements Serializable\n\nA SQL statement and optional bound parameters that can be executed in a [ReadContext](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.ReadContext).\n\nThe SQL query string can contain parameter placeholders. A parameter placeholder consists of\n@ followed by the parameter name. Parameter names consist of any combination of\nletters, numbers, and underscores.\n\nParameters can appear anywhere that a literal value is expected. The same parameter name can\nbe used more than once, for example: `WHERE id \u003e @msg_id AND id \u003c @msg_id + 100`\n\nIt is an error to execute an SQL query with placeholders for unbound parameters.\n\nStatements are constructed using a builder. Parameter values are specified by calling Builder#bind(String). For example, code to build a query using the clause above and bind a value\nto `id` might look like the following: \n\n\n Statement statement = Statement\n .newBuilder(\"SELECT name WHERE id \u003e @msg_id AND id \u003c @msg_id=\"\" +=\"\" 100\")=\"\" .bind(\"msg_id\").to(500)=\"\" .build();=\"\"\u003e\n\n`Statement` instances are immutable. \n\nInheritance\n-----------\n\n[Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e Statement \n\nImplements\n----------\n\n[Serializable](https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html) \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\nStatic Methods\n--------------\n\n### newBuilder(String sql)\n\n public static Statement.Builder newBuilder(String sql)\n\nCreates a new statement builder with the SQL text `sql`.\n\n### of(String sql)\n\n public static Statement of(String sql)\n\nCreates a `Statement` with the given SQL text `sql`.\n\n### of(String sql, ImmutableMap\\\u003cString,Value\\\u003e parameters)\n\n public static Statement of(String sql, ImmutableMap\u003cString,Value\u003e parameters)\n\nCreates a [Statement](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.Statement) with the given SQL text and parameters.\n\nMethods\n-------\n\n### analyzeQuery(ReadContext context, ReadContext.QueryAnalyzeMode queryMode)\n\n public ResultSet analyzeQuery(ReadContext context, ReadContext.QueryAnalyzeMode queryMode)\n\nAnalyzes the query in `context`. `statement.analyzeQuery(context, queryMode)` is\nexactly equivalent to `context.analyzeQuery(statement, queryMode)`.\nSee Also: [ReadContext#analyzeQuery(Statement, com.google.cloud.spanner.ReadContext.QueryAnalyzeMode)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.ReadContext#com_google_cloud_spanner_ReadContext_analyzeQuery_)\n\n### equals(Object o)\n\n public boolean equals(Object o)\n\n**Overrides** \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-)\n\n### executeQuery(ReadContext context, Options.QueryOption\\[\\] options)\n\n public ResultSet executeQuery(ReadContext context, Options.QueryOption[] options)\n\nExecutes the query in `context`. `statement.executeQuery(context)` is exactly\nequivalent to `context.executeQuery(statement)`.\nSee Also: [ReadContext#executeQuery(Statement, Options.QueryOption...)](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.ReadContext#com_google_cloud_spanner_ReadContext_executeQuery_)\n\n### getParameters()\n\n public Map\u003cString,Value\u003e getParameters()\n\nReturns the parameters bound to this `Statement`.\n\n### getQueryOptions()\n\n public ExecuteSqlRequest.QueryOptions getQueryOptions()\n\nReturns the QueryOptions that will be used with this [Statement](/java/docs/reference/google-cloud-spanner/latest/com.google.cloud.spanner.Statement).\n\n### getSql()\n\n public String getSql()\n\nReturns the current SQL statement text.\n\n### hasBinding(String parameter)\n\n public boolean hasBinding(String parameter)\n\nReturns `true` if a binding exists for `parameter`.\n\n### hashCode()\n\n public int hashCode()\n\n**Overrides** \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--)\n\n### toBuilder()\n\n public Statement.Builder toBuilder()\n\n### toString()\n\n public String toString()\n\n**Overrides** \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--)\n\n### withReplacedSql(String sql)\n\n public Statement withReplacedSql(String sql)\n\nReturns a copy of this statement with the SQL string replaced by the given SQL string."]]