2012-02-14 11 views
1

Excelのデータをjavaのデータベースに挿入しようとしています。そのために私は両方のデータベースをODBCを使って接続しました。 excelsheetには、2つのカラムcnameとtitleがあります。 Excelスプレッドシートをクエリした後、私はcnameとtitleのresultSet値をarraylistに保存しました。挿入問合せのarraylist

 List Cname = new ArrayList(); 
     List Title=new ArrayList(); 

      Cname.add(rs.getString("Cname")); 
      Title.add(rs.getString("Title")); 

私はそれがこのように格納されてきているINSERTクエリを使用してSQLデータベースにこれを挿入しようとすると、これは、この

 [aaa, bbb,cccc, dddd] 
     [tree,human,animal,bird] 

のようになります。

statement1.executeUpdate("INSERT INTO dbo.company (Cname,Title) SELECT  
    '"+Cname+"','"+Title+"'"); 


     Cname        Title 

    [aaa, bbb,cccc, dddd]  [tree,human,animal,bird] 

は、しかし、私はこの??? plsはこれで解決するのに役立つんですか

 Cname    Title 
    ___________________________ 
     aaa     tree 
     bbb     human 
     cccc    animal 
     ddd     bird 

としてこれを保存します。

答えて

1

あなたはリストは値更新/挿入する必要があります、実際には全体のリストの文字列表現を挿入している。..

と仮定すると、両方のリストが存在する(nullでない)と同じ長さを持っていない、これは些細なソリューションです:

for (int i = 0; i < Cname.size(); i++ { 
    statement1.executeUpdate("INSERT INTO dbo.company (Cname,Title) SELECT  
    '"+Cname.get(i)+"','"+Title.get(i)+"'"); 
} 

- すべてのJavaクラスにtoString()メソッドの実装があり、SQL文を作成する式のように "オブジェクトを文字列として使用する"ときにそのメソッドが呼び出されます。リストの場合、メソッドは、リスト要素の(String-representation)を単にカッコで囲んだStringを返します。

1

あなたの挿入文の周りforループを置く:

for(int i = 0; i < Cname.size(); i++) 
    statement1.executeUpdate("INSERT INTO dbo.company (Cname,Title) values ('"+Cname.get(i)+"','"+Title.get(i)+"')"); 
0

データベースがSQL Serverの場合は、次のQ &を参照できます。xmlデータを準備し、ストアドプロシージャに渡すだけです。上記のExcel用動作しない場合(

StringBuilder sql = new StringBuilder(); 
sql.append("INSERT INTO dbo.company (Cname,Title) VALUES "); 

String glue = ""; 
for (int i = 0; i < Cname.size(); i++) { 
    sql.append(glue); 
    sql.append("('"); 
    sql.append(Cname.get(i).toString().replace("'", "''")); 
    sql.append("', '"); 
    sql.append(Title.get(i).toString().replace("'", "''")); 
    sql.append("')"); 
    glue = ", "; 
} 

statement1.executeUpdate(sql.toString()); 

代替構文:JDBCで

INSERT INTO dbo.company (Cname, Title) 
VALUES ('aaa', 'tree'), 
     ('bbb', 'human'), 
     ('cccc', 'animal'), 
     ('dddd', 'bird') 

How to Update SQL Server Table With Data From Other Source (DataTable)

0

あなたはこの形式の単一のSQL文を作成することができますスプレッドシート)は次のとおりです。

INSERT INTO dbo.company (Cname, Title) 
SELECT 'aaa', 'tree' UNION ALL 
SELECT 'bbb', 'human' UNION ALL 
SELECT 'cccc', 'animal' UNION ALL 
SELECT 'dddd', 'bird' 

またはJDBCの場合

StringBuilder sql = new StringBuilder(); 
sql.append("INSERT INTO dbo.company (Cname,Title) "); 

String glue = ""; 
for (int i = 0; i < Cname.size(); i++) { 
    sql.append(glue); 
    sql.append("SELECT '"); 
    sql.append(Cname.get(i).toString().replace("'", "''")); 
    sql.append("', '"); 
    sql.append(Title.get(i).toString().replace("'", "''")); 
    sql.append("'"); 
    glue = " UNION ALL "; 
} 

statement1.executeUpdate(sql.toString());