0

データベース(MS-SQL)にデータを挿入しようとすると、小さな問題が発生します。私はこのコードを使用しています(すべてをコピーして貼り付けるだけなので、誰かが私が理解していないことを理解している可能性があります)

 try 
              {
                  Connection connection = null;
                  Statement Statement = null;
                  ResultSet ResultSet = null;
                  String query = "";

              // jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
              String host = "jdbc:sqlserver://server;databaseName=db";
              String username = "user";
              String password = "pass";
              Statement = connection.createStatement();
              DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              Calendar cal = Calendar.getInstance();

              DateFormat dateFormat1 = new SimpleDateFormat("dd.MM.yyyy");
              Calendar cal1 = Calendar.getInstance();

              for (int k = 0; k < idArray.length ; k ++ )
              {
                  query = "INSERT INTO Companies (ID,Company,Company2,Company3,Country,ZIP,City,Street," +
                        "Phone,Fax,Email,Internet,CustomerNo,AccountMngr,Icon,AddressSource," +
                        "UserDefined1,UserDefined2,CreatedOn,CreatedBy,ColectedInformation) " +
                        " VALUES ('" + UUID.randomUUID() + "','" + company_nameArray[k] 
                                + "','" + company_name2Array[k] + "','" + company_name3Array[k] + "','DE','"   
                                + zipArray[k] + "','" + cityArray[k] + "','" + streetArray[k] + "','"  
                                + phone_Array[k] + "','" + faxArray[k] + "','" + emailArray[k] + "','"
                                + internetArray[k] + "','" + customer_noArray[k] 
                                + "','d','131','60','Baufinder Import','Import Datum "
                                + dateFormat1.format(cal1.getTime()) + "','" 
                                + dateFormat1.format(cal1.getTime()) + "','d','" 
                                + "cxcxvcx" +  
                                "')";

                  ResultSet = Statement.executeQuery(query);   
              }

              connection.close();
          }
          catch(NullPointerException e)
          {
                System.out.println("NullPointerException");
          }
          catch ( SQLException err ) 
          {
              System.out.println( "SQL Exception:" ) ;

              // Loop through the SQL Exceptions
              while( err != null )
                 {
                  System.out.println( "State  : " + err.getSQLState()  ) ;
                  System.out.println( "Message: " + err.getMessage()   ) ;
                  System.out.println( "Error  : " + err.getErrorCode() ) ;

                  err = err.getNextException() ;
                 }
          }
          catch( Exception e )
          {
              System.out.println( "There is a problem with " + e ) ;
          }

    }

そして私はこのエラーを受け取っています:

SQL例外:状態:nullメッセージ:ステートメントによって返された結果セットがありませんでした。エラー:0

結果テストの問題がわかりません。別のデータベースからデータを読み取ろうとして、別のデータベースに挿入しようとしているので、これを頻繁に使用しています。さらに、これらのテーブルのすべてにnull値が含まれているわけではありません。

前もって感謝します:)

4

1 に答える 1

0

Statement#execute(query);の代わりにStatement#executeUpdate(String)を使用します。

for (int k = 0; k < idArray.length ; k ++ )
          {
              query = "INSERT INTO Companies (ID,Company,Company2,Company3,Country,ZIP,City,Street," +
                    "Phone,Fax,Email,Internet,CustomerNo,AccountMngr,Icon,AddressSource," +
                    "UserDefined1,UserDefined2,CreatedOn,CreatedBy,ColectedInformation) " +
                    " VALUES ('" + UUID.randomUUID() + "','" + company_nameArray[k] 
                            + "','" + company_name2Array[k] + "','" + company_name3Array[k] + "','DE','"   
                            + zipArray[k] + "','" + cityArray[k] + "','" + streetArray[k] + "','"  
                            + phone_Array[k] + "','" + faxArray[k] + "','" + emailArray[k] + "','"
                            + internetArray[k] + "','" + customer_noArray[k] 
                            + "','d','131','60','Baufinder Import','Import Datum "
                            + dateFormat1.format(cal1.getTime()) + "','" 
                            + dateFormat1.format(cal1.getTime()) + "','d','" 
                            + "cxcxvcx" +  
                            "')";

              int updatedRowCount = Statement.executeUpdate(query);   
          }

ノート:

  1. 一部のデータがユーザーによって直接入力された場合にSQLインジェクションが発生する可能性を防ぐために、PreparedStatementの使用を検討してください。
  2. 挿入のパフォーマンスを向上させる必要がある場合は、バッチ挿入を使用してみてください。
于 2013-01-28T09:14:45.120 に答える