"SELECT ... INTO" Statements

This section describes how to create a table and insert data rows with a special SELECT statement.

SQL Server supports a special SELECT statement with an INTO clause, referred as SELECT INTO statement sometimes. It combines SELECT, CREATE TABLE and INSERT operations in a single statement. This statement should be treated as an update statement from the JDBC point of view, since it will not return any result set.

In this section, I want to use this SELECT INTO statement to build a new table with data from the existing sample table Customer. The new table will be called, Profile, in my schema, Herong. Here is the Java program that execute this SELECT INTO statement:

/* SelectInto.java
 - Copyright (c) 2015, HerongYang.com, All Rights Reserved.
 */
import java.sql.*;
public class SelectInto {
  public static void main(String [] args) {
    Connection con = null;
    try {

      con = DriverManager.getConnection(
          "jdbc:sqlserver://localhost\\SQLEXPRESS;"
        + "user=sa;password=HerongY@ng;"
        + "database=AdventureWorks2014");

      Statement sta = con.createStatement(); 

// creating new table and insert data in a single statement
      int count = sta.executeUpdate(
        "SELECT TOP 10 BusinessEntityID, Title, FirstName, LastName,"
        + " ModifiedDate"
        + " INTO Herong.Customer FROM Person.Person");
      System.out.println("Number of rows inserted: "+count);

// getting the data back
      ResultSet res = sta.executeQuery(
        "SELECT * FROM Herong.Customer");
      System.out.println("List of Customers: "); 
      while (res.next()) {
         System.out.println(
           "  "+res.getString("Title")
           + ", "+res.getString("FirstName")
           + ", "+res.getString("LastName")
           + ", "+res.getDate("ModifiedDate"));
      }
      res.close();

      sta.close();
      con.close();        
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

The output confirms that the SELECT INTO statement worked correctly:

C:\herong>\Progra~1\java\jdk1.8.0_45\bin\java 
   -cp .;\local\lib\sqljdbc42.jar SelectInto

Number of rows inserted: -1
List of Customers:
  null, Ken, Sánchez, 2009-01-07
  null, Terri, Duffy, 2008-01-24
  null, Roberto, Tamburello, 2007-11-04
  null, Rob, Walters, 2007-11-28
  Ms., Gail, Erickson, 2007-12-30
  Mr., Jossef, Goldberg, 2013-12-16
  null, Dylan, Miller, 2009-02-01
  null, Diane, Margheim, 2008-12-22
  null, Gigi, Matthew, 2009-01-09
  null, Michael, Raheem, 2009-04-26

However, I am expecting the return value of the executeUpdate() call to be the number of rows inserted, which should be 10. But the output shows -1. It looks like Microsoft JDBC Driver 4.2 does not meet the JDBC specification.

Previously, when I ran the same example program with JDK 1.6, JDBC Driver 1.0, and SQL Server 2005 Express Edition, the program failed with a different error message:

C:\herong>\progra~1\java\jdk1.6.0_02\bin\java 
   -cp .;\local\lib\sqljdbc.jar SelectInto

Number of rows inserted: 10
List of Customers:
  1, Orlando, Gee, 2004-10-13
  2, Keith, Harris, 2004-10-13
  3, Donna, Carreras, 2004-10-13
  4, Janet, Gates, 2004-10-13
  5, Lucy, Harrington, 2004-10-13
  6, Rosmarie, Carroll, 2004-10-13
  7, Dominic, Gash, 2004-10-13
  10, Kathleen, Garza, 2004-10-13
  11, Katherine, Harding, 2004-10-13
  12, Johnny, Caprio, 2004-10-13

Last update: 2015.

Table of Contents

 About This Book

 JDBC (Java Database Connectivity) Introduction

 JDK (Java SE) Installation

 Installing and Running Java DB - Derby

 Derby (Java DB) JDBC Driver

 Derby (Java DB) JDBC DataSource Objects

 Java DB (Derby) - DML Statements

 Java DB (Derby) - ResultSet Objects of Queries

 Java DB (Derby) - PreparedStatement

 MySQL Installation on Windows

 MySQL JDBC Driver (MySQL Connector/J)

 MySQL - PreparedStatement

 MySQL - Reference Implementation of JdbcRowSet

 MySQL - JBDC CallableStatement

 MySQL CLOB (Character Large Object) - TEXT

 MySQL BLOB (Binary Large Object) - BLOB

 Oracle Express Edition Installation on Windows

 Oracle JDBC Drivers

 Oracle - Reference Implementation of JdbcRowSet

 Oracle - PreparedStatement

 Oracle - JBDC CallableStatement

 Oracle CLOB (Character Large Object) - TEXT

 Oracle BLOB (Binary Large Object) - BLOB

 Microsoft SQL Server 2005 Express Edition

 Microsoft JDBC Driver for SQL Server - sqljdbc42.jar

 Microsoft JDBC Driver - Query Statements and Result Sets

 Microsoft JDBC Driver - DatabaseMetaData Object

 Microsoft JDBC Driver - DDL Statements

Microsoft JDBC Driver - DML Statements

"SELECT ... INTO" Statements

 "INSERT INTO" Statements

 "INSERT INTO" Statements with INDENTITY Columns

 "UPDATE" Statements

 "DELETE FROM" Statements

 SQL Server - PreparedStatement

 SQL Server CLOB (Character Large Object) - TEXT

 SQL Server BLOB (Binary Large Object) - BLOB

 JDBC-ODBC Bridge Driver - sun.jdbc.odbc.JdbcOdbcDriver

 JDBC-ODBC Bridge Driver - Flat Text Files

 JDBC-ODBC Bridge Driver - MS Access

 JDBC-ODBC Bridge Driver - MS SQL Server

 Summary of JDBC Drivers and Database Servers

 Additional Tutorial Notes to Be Added

 Outdated Tutorials

 References

 PDF Printing Version