2017-02-15 107 views
0

我正在尝试使用JDBC一次执行多个SQL语句。我知道可以使用addBatch()和executeBatch()函数来完成此操作。我已经将它们合并到我的代码中,甚至“SET NOCOUNT OFF”,但是我的CREATE和INSERT语句没有反映在我的SQL Server数据库中。以下是我已经尝试如下:如何使用JDBC创建表和插入记录到表中?

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 
import org.testng.annotations.AfterClass; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.Test; 
import com.microsoft.sqlserver.jdbc.SQLServerException; 

public class Excel_Java_POI_Exp_V2 
{ 
    @BeforeClass 
    public void setUp() throws Exception 
    { 
     //Do Nothing 
    } 

    @Test 
    public void testUsingExcel() throws Exception, SQLException 
    { 
     String url = "jdbc:sqlserver://localhost:1433;" + "databaseName=AdventureWorks2012;" + "integratedSecurity=true;"; 

     try 
     { 
      //Loading the required JDBC Driver class 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

      //Creating a connection to the database 
      Connection conn = DriverManager.getConnection(url); 

      //Print Connection Verification 
      System.out.println("Connection Established ln"); 

      Statement query = conn.createStatement(); 

      //Executing SQL query and fetching the result 
      String SQL = "SET NOCOUNT OFF;"; 

      //CREATE A NEW SQL TABLE AFTER ESTABLISHING CONNECTION 
      String SQL_Create = "CREATE TABLE SELCREATEDB" 
          + "(PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255));"; 

      //INSERT 10 RECORDS WITHIN DATABASE TABLE 
      String SQL1 = "INSERT INTO dbo.SELCREATEDB VALUES " 
          + "(\"1000\", \"Davis\", \"John\", \"3444 Mulberry Lane\", \"Oakland CA\")"; 

      String SQL2 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1001\", \"Robinson\", \"Larry\", \"5633 Skyline Drive\", \"Annandale VA\")"; 

      String SQL3 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1002\", \"Arafat\", \"Yasser\", \"5633 Quidbury Lane\", \"Hezburg Israel\")"; 

      String SQL4 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1003\", \"Castro\", \"Fidel\", \"5234 Honey Tree Avenue\", \"Port Lunciana Cuba\")"; 

      String SQL5 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1004\", \"Carter\", \"Jimmy\", \"9234 Mackel Court\", \"Lynchburg VA\")"; 

      String SQL6 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1005\", \"Boro\", \"Kerebede\", \"2342 Memory Lane\", \"Jamestowne VA\")"; 

      String SQL7 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1006\", \"Attenborough\", \"David\", \"3330 Peach Lane\", \"Atlanta GA\")"; 

      String SQL8 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1007\", \"Ahmed\", \"David\", \"30499 Tressleburry Lane\", \"Tampa FL\")"; 

      String SQL9 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1008\", \"Tramper\", \"Jamie\", \"30499 Dickens Avenue\", \"Dallas TX\")"; 

      String SQL10 = "INSERT INTO dbo.SELCREATEDB VALUES " 
         + "(\"1009\", \"Valentine\", \"Rudy\", \"8900 Spicetree Lane\", \"San Diego CA\")"; 


      //SET PROPERTIES 
      query.addBatch(SQL); 

      //CREATE TABLE 
      query.addBatch(SQL_Create); 

      //INSERT RECORDS 
      query.addBatch(SQL1); 
      query.addBatch(SQL2); 
      query.addBatch(SQL3); 
      query.addBatch(SQL4); 
      query.addBatch(SQL5); 
      query.addBatch(SQL6); 
      query.addBatch(SQL7); 
      query.addBatch(SQL8); 
      query.addBatch(SQL9); 
      query.addBatch(SQL10); 

      //EXECUTE ALL COMMANDS 
      query.executeBatch(); 

      //CLOSE CONNECTION 
      conn.close(); 
     } 
     catch (SQLServerException sqe) 
     { 
      System.out.println("A result set was generated for update."); 
     } 
     catch (java.sql.BatchUpdateException bae) 
     { 
      System.out.println("Executed Queries! Terminating Connection..."); 
     } 
    } 

    @AfterClass 
    public void tearDown() throws Exception 
    { 
     //Do Nothing 
    } 
} 

我使用SQL Server 2012标准版与建立JDBC连接到AdventureWorks2012数据库。任何帮助将非常感激。谢谢!

+0

您是否在控制台中发现任何错误?尝试添加conn.setAutoCommit(false);在开始事务和conn.commit()之前;在末尾 –

+0

我主要有我的INSERT语句错误。我收到格式错误。我能够将代码分成两部分,所以我的CREATE语句将首先执行,然后我将声明conn2.createStatement()设置为query2,我将在INSERT语句中单独添加,但这不起作用 –

+0

在你的连接url databaseName = AdventureWorks2012中,并在插入语句中试图插入到dbo.SELCREATEDB中。您应该从插入语句中删除dao –

回答

-1

您拥有的代码绝对没问题,但是您为INSERT编写的SQL语句并不是最好的代码之一。问题本身就是INSERT查询!

我已经更正了INSERT查询并执行了一个更改SQL AUTHENTICATION的程序,程序没有问题。

更新代码:

public class DDLDMLStatementsinJDBC 
{ 
    public static final String URL = "jdbc:sqlserver://localhost:1433;" + "databaseName=Dummy;sendStringParametersAsUnicode=false"; 
    public static final String DBUSER = "sa"; 
    public static final String DBPASS = "Welcome12!"; 

    public static void main(String[] args) throws Exception, SQLException 
    { 
     try 
     { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection conn = DriverManager.getConnection(URL, DBUSER, DBPASS); 

      System.out.println("Connection Established ln"); 
      Statement query = conn.createStatement(); 


      String SQL = "SET NOCOUNT OFF;"; 
      String SQL_Create = "CREATE TABLE SELCREATEDB" + "(PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255));"; 

      String SQL1 = "INSERT INTO dbo.SELCREATEDB VALUES " + "(1000, 'Davis', 'John', '3444 Mulberry Lane', 'Oakland CA')"; 
      String SQL2 = "INSERT INTO dbo.SELCREATEDB VALUES " + "(1001, 'Robinson', 'Larry', '5633 Skyline Drive', 'Annandale VA')"; 
      String SQL3 = "INSERT INTO dbo.SELCREATEDB VALUES " + "(1002, 'Arafat', 'Yasser', '5633 Quidbury Lane', 'Hezburg Israel')"; 
      String SQL4 = "INSERT INTO dbo.SELCREATEDB VALUES " + "(1003, 'Castro', 'Fidel', '5234 Honey Tree Avenue', 'Port Lunciana Cuba')"; 
      String SQL5 = "INSERT INTO dbo.SELCREATEDB VALUES " + "(1004, 'Carter', 'Jimmy', '9234 Mackel Court', 'Lynchburg VA')"; 

      query.addBatch(SQL); 
      query.addBatch(SQL_Create); 

      query.addBatch(SQL1); 
      query.addBatch(SQL2); 
      query.addBatch(SQL3); 
      query.addBatch(SQL4); 
      query.addBatch(SQL5); 

      query.executeBatch(); 

      conn.close(); 
     } 
     catch (SQLServerException sqe) 
     { 
      System.out.println("A result set was generated for update."); 
      sqe.printStackTrace(); 
     } 
     catch (java.sql.BatchUpdateException bae) 
     { 
      System.out.println("Executed Queries! Terminating Connection..."); 
      bae.printStackTrace(); 
     } 
    } 
} 

希望你能得到改变!

+0

谢谢,先生!一旦我在“sendStringParametersAsUnicode = false;”中添加,我就能够得到这个工作。那基本上就是这样! –