2017-10-09 10 views
0

私はSQLite Studioに "LOCATIONS"という名前のテーブルを持つデータベースを持っています。このテーブルには、次の列があります大規模なSQLiteデータベースにカスタムスクリプトから派生した値を設定する

  • location_idの(PK)
  • location_x
  • location_y

Iは、(2000x1000マトリックス内の各画素のIDと位置で、このデータベースを作成したいです1,0,0; ​​2,0,1; 3,0,2; ... 2000000,1999,999)。

まず、私はJavaで次のことを実行し、.txtに出力を保存:

public class matrix { 
    public static void main(String[] args) { 
    int c = 1; 
    for (int x = 0; x < 2000; x++) { 
     for (int y = 0; y < 1000; y++) { 
     System.out.print("('" +c+ "','" +x+ "','" +y+ "')\n"); 
     c++; 
     } 
    } 
    } 
} 

は、それから私は(ここでは、プログラミングの専門知識の私の不足はご容赦)SQLStudioの中に挿入ステートメントに直接2MラインをコピーしてみましたSQLエディタですが、私のコンピュータはそれを処理できず、毎回プログラムがクラッシュします。

私の問題の最適な解決策は何でしょうか?

+0

のjavaを忘れて、SQLiteのコマンドラインからだけでSQLを使用しています。 –

答えて

2

私はあなたがこのようCTEを使用location_id (pk)フィールド、その後の代わりに、列のすべての値を生成するINTEGER PRIMARY KEY AUTOINCREMENTように作ることをお勧めすることができます

with recursive x(i) as(
    select 1 
    union all 
    select i+1 
    from x 
    where i<2000 
), y(i) as(
    select 1 
    union all 
    select i+1 
    from y 
    where i<1000 
), t as (
    select x.i x, y.i y 
    from x 
    cross join y 
) 
insert into LOCATIONS (location_id, location_x,location_y) 
select null, x, y 
from t 
order by x, y; 

SQL Fiddle Demo

+0

正しいIDを確保するために計算されたIDを使用する方が良いと思っていますが、このソリューションははるかに高速です。 –

関連する問題