2016-12-06 6 views
1

私はMySqlに送るリストが2つあります。逆のリストですが1回

public ArrayList<Double> lat = new ArrayList<Double>(); 
public int l = lat.size(); 

public ArrayList<Double> lng = new ArrayList<Double>(); 
public int ll = lng.size(); 

Double l = lat.get(i); 
Double ll = lng.get(i); 

String sql = "INSERT INTO tab (lat, lng) VALUES('" + l + "', '" + ll + "')"; 
       stmt.executeUpdate(sql); 

が、間違った順序で、私はこれで再び、このメソッドを使用するとき、私は

Double l = lat.get(i); 
Double ll = lng.get(i); 

Collections.reverse(lat); 
Collections.reverse(lng); 

を入れて、すべてが良いために働く、しかしリスト内の同じ要素が再び反転されます...

リストに要素を追加する:

lat.add(l, currentLatitude); 
lng.add(ll, currentLongitude); 

どのようにするには、その要素は常に順調ですか?

+0

あなたのコードを完全に貼り付けます。 – Shriram

+0

フラグ変数を更新することができますか?あなたのケースで動作しますか? –

+1

ListIteratorとhasPrevious APIを使用してください。リストを逆順に解析するのに役立ちます。 – Vinodh

答えて

1

ListIteratorとそのhasPrevious APIを使用します。リストを逆順に解析するのに役立ちます。

public ArrayList<Double> lat = new ArrayList<Double>(); 
    public int l = lat.size(); 

    public ArrayList<Double> lng = new ArrayList<Double>(); 
    public int ll = lng.size(); 


    ListIterator latIt = lat.listIterator(l); 
    ListIterator longIt = lng.listIterator(ll); 

    while(latIt.hasPrevious()) { 
     System.out.println(latIt.previous()); 
    } 
    while(longIt.hasPrevious()) { 
     System.out.println(longIt.previous()); 
    } 
0

Collections.reverse方法はlatlng順序を更新し、このコードはボタンによって実行されると、それはすべての時間を実行されるため、それはあなたのためにOKではありません。

public ArrayList<Double> lat = new ArrayList<Double>(); 
for(int l=0 ...){ 
    ... retrieve currentLatitude 
    lat.add(l, currentLatitude); 
} 
public int l = lat.size(); 

public ArrayList<Double> lng = new ArrayList<Double>(); 
for(int ll=0 ...){ 
    ... retrieve currentLongitude 
    lng.add(ll, currentLongitude); 
} 
public int llsize = lng.size(); 

for(int i=llsize-1;i>=0;i--){ 

    Double l = lat.get(i); 
    Double ll = lng.get(i); 

    String sql = "INSERT INTO tab (lat, lng) VALUES('" + l + "', '" + ll + "')"; 
    stmt.executeUpdate(sql); 
} 
... 
+0

"Collections.reverse"がまだボタンコード内にあり、いずれかを押すと別の反転が起こり、コードボタンの外に 'Collections.reverse'を置くと、決して実行されないので、動作しません。 – lukash

+0

ok、私は知らなかったそれについては、 "Collections.reverse"はこの場合には適合しません。最後から配列リストを反復しようとします。私は答えのコードを更新します。 – user6904265

+0

これはうまくいくようですが、このループをint l/ll = 0でコーディングする方法がわかりません – lukash

0

は、バッファ内の各リストのための1つをあなたのリストを置く:私はあなただけ端から始まるlatlngのArrayListを繰り返すことができると思います。

var bufLat = new ArrayList<Double>(lat); 
var bugLng = new ArrayList<Double>(lng); 

その後、すべての次の操作、バッファにそれを作る:あなたはあなたのリストの元の順序を変更するために避け、あなたが彼らの順序を維持し、新たなアイテムを追加し続けることができます。このように

Collections.reverse(bufLat); 
Collections.reverse(bufLng); 

Double l = bufLat.get(i); 
Double ll = bufLng.get(i); 

リストに挿入する。

限りの懸念としてデシベルを行うにはあなたの方法は、DBに挿入するSQL:

String sql = "INSERT INTO tab (lat, lng) VALUES('" + l + "', '" + ll + "')"; 
stmt.executeUpdate(sql); 

を、それが可能SQLインジェクション攻撃に開きますので、より良い解決策は、これを見るために、それは...、非常に良くない習慣ですSO https://stackoverflow.com/a/8218932/3762855

+0

SQLインジェクションについて警告するのは、私が実際に何かを注入できるとは思わないからですダブルインスタンス。 – AxelH

+0

これは代わりに可能です..単にSQLステートメントの "l"と "ll"値の周りの一重引用符を見てみる必要があります... –

+0

これでクエリを挿入する方法の例を追加できますか?はい、クエリには文字型がありますが、Javaでは数字だけしか表示されません。どうすればいいかはわかりませんが、何かが間違っている可能性があります。 – AxelH

0
lat.add(l, currentLatitude); 
lng.add(ll, currentLongitude); 

上の例では、インデックスである必要がありjavadocの(https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#add-int-E-) リットルとLLに応じて以来、少し奇妙なルックスと、ここで、あなたは二重の値を使用しています。

ここで引数を切り替えた可能性があります

+0

"lとllはインデックスでなければなりません"と言ってどういう意味ですか? – lukash

+0

ArrayListクラスのaddメソッドのシグネチャは次のとおりです。 –

+0

'code' public void add (int型のインデックス、Eの要素)私は理解していない何 'code' は、ArrayListの中でインデックスとしてダブルスの使い方です: ' code' ダブルリットル= lat.get(I); Double ll = lng.get(i); 'code' –

関連する問題