마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트뷰 갱신 질문 드려요

0 추천

1. DB에 있는 데이터를 불러와 리스트뷰에 뿌려줍니다

2. 딜리트 쿼리 실행 후 다시 DB에 있는 데이터를 활용하여 리스트뷰를 뿌려줍니다.

구상은 이러했지만 리스트뷰 갱신이안되네요

그리고 한가지 더 updateDB()함수에서 계속 에러로그를 남깁니다

10-12 02:15:43.058  32076-32076/com.example.admin.sqltest W/버튼 에러﹕ null

stmt.executeQuery(query1);

이 구문이 정상적으로 실행은 안되네요

쿼리는 적용이 되는데 다음으로 넘어가지가 않습니다.

package com.example.admin.sqltest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.os.AsyncTask;

public class MainActivity extends Activity {
    Connection conn = null;
    Statement stmt = null;
    ResultSet reset = null;
    ArrayList<String> list = new ArrayList<String>();


    ListView listview;
    ArrayAdapter<String> adapter;
    MyAsyncTask mTask;
    static String query = "select * from dbtest " ;
    static String query1 = "delete from dbtest where no=2";
            ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listview = (ListView) findViewById(R.id.listView);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        listview.setAdapter(adapter);

        findViewById(R.id.button).setOnClickListener(mClickListener);
    }
        Button.OnClickListener mClickListener = new View.OnClickListener() {
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.button:
                        Log.i("", "버튼 호출됨");
                        Log.i("Connection","stmt 확인 : "+stmt);

                        updateDB();

                        break;
                }
            }
        };

    public void updateDB(){
        Log.i("", "updateDB() 함수 호출");
        try {
            stmt.executeQuery(query1);
/*
            while(reset.next()){

                final String str = reset.getString(1)+" "+reset.getString(2)+" "+reset.getString(3);
                list.add(str);
            }
            adapter.addAll(list);
            Log.i("", "어뎁터에 리스트 추가");

            adapter.notifyDataSetChanged();
            Log.i("", "화면 갱신 뚜둥");
*/
            // conn.close();


        }
        catch (Exception e)
        {
            Log.w("버튼 에러", "" + e.getMessage());
        }
    }
    @Override
    protected void onStart() {
        super.onStart();

        handler.sendEmptyMessage(0);
    }

    class MyAsyncTask extends AsyncTask<String, Void, ArrayList<String>>
    {

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
        }


        @Override
        protected ArrayList<String> doInBackground( String... params){
            try {
                Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
                Log.i("Connection","MSSQL 라이브러리 로드");

                conn = DriverManager.getConnection("jdbc:jtds:sqlserver://xxx.xxx.xxx.184:1433/test","mesapp","dhc8700!?#");
                Log.i("Connection","MSSQL 접속 성공 : "+conn);

                stmt = conn.createStatement();
                Log.i("Connection","stmt 확인 : "+stmt);
                reset = stmt.executeQuery(query);



                while(reset.next()){

                    if ( isCancelled() ) break;

                    final String str = reset.getString(1)+" "+reset.getString(2)+" "+reset.getString(3);
                    list.add(str);


                }
               // conn.close();
                Log.i("list 내용 확인 함수 : ","" + list);
            }

            catch (Exception e)
            {
                Log.w("111Error connection", "" + e.getMessage());
            }

            return list;
        }

        @Override
        protected void onPostExecute(ArrayList<String> list){

            adapter.clear();
            adapter.addAll(list);


            adapter.notifyDataSetChanged();
            //handler.sendEmptyMessageDelayed(0, 1000);
        }

        @Override
        protected void onCancelled(){
            super.onCancelled();
        }
    }

    public Handler handler = new Handler(){
        public void handleMessage( Message msg){
            super.handleMessage(msg);

            mTask = new MyAsyncTask();

            mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");
        }
    };
}
Joel12 (220 포인트) 님이 2015년 10월 12일 질문
Joel12님이 2015년 10월 12일 수정

2개의 답변

0 추천
query 를 출력해보세요
aucd29 (218,390 포인트) 님이 2015년 10월 12일 답변
Log.i("", "쿼리문"+query1);
stmt.executeQuery(query1);
Log.i("", "쿼리실행");

10-12 04:19:01.566  12791-12791/com.example.admin.sqltest I/﹕ 쿼리문INSERT INTO dbtest (no,ni,nu) VALUES (1,20,2)
10-12 04:19:01.722  12791-12791/com.example.admin.sqltest W/버튼 에러﹕ null
쿼리문은 정상적으로 출력 됩니다
0 추천
어딜 봐도

ResultSet 의 result 변수를 사용하는 곳이 없네요.

null로 선언하고 그걸 while 돌리니 바로 null로 빠지는게 당연.
개발자초심 (21,220 포인트) 님이 2015년 10월 12일 답변
updateDB 안의 while문은 주석처리 되어 있습니다
stmt.executeQuery(query1);
함수 전에
handler.sendEmptyMessage(0);
넣어주니 출력까지 잘 되네요
...