JDBC Tutorials - Herong's Tutorial Examples - Version 3.03, by Dr. Herong Yang
"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
JDBC (Java Database Connectivity) Introduction
Installing and Running Java DB - Derby
Derby (Java DB) JDBC DataSource Objects
Java DB (Derby) - DML Statements
Java DB (Derby) - ResultSet Objects of Queries
Java DB (Derby) - PreparedStatement
MySQL JDBC Driver (MySQL Connector/J)
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 - Reference Implementation of JdbcRowSet
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
"INSERT INTO" Statements with INDENTITY Columns
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