개발중인 어플이 있습니다
MSSQL DB를 사용하고 있어서 JTDS를 활용하는 중입니다.
여기서 제가 query 변수에 저장된 쿼리문으로 리스트를 불러옵니다
그리고 버튼을 눌렀을때 query1 변수에 저장된 쿼리문을 실행해 데이터를 삭제하려고 합니다.
그런데 버튼은 정상적으로 호출이 되지만 stmt.executeQuery(query1); 이 구문이 실행되지 않아 쿼리문 실행이 되지 않네요
로그를 하나하나 찍어가면서 하고 있는데 발생하는 오류가 무엇때문인지 이유를 알 수가 없습니다.
혹시나 DB 업데이트나 호출할때 어떻게 해야 하는지 아시는분 계시다면 조언 부탁드리겠습니다.
로그입니다.
10-11 23:46:29.830 11034-11056/com.example.admin.sqltest I/Connection﹕ MSSQL 라이브러리 로드
10-11 23:46:30.733 11034-11041/com.example.admin.sqltest W/art﹕ Suspending all threads took: 11.102ms
10-11 23:46:30.761 11034-11056/com.example.admin.sqltest I/Connection﹕ MSSQL 접속 성공 : net.sourceforge.jtds.jdbc.ConnectionJDBC2@284f468b
10-11 23:46:30.769 11034-11056/com.example.admin.sqltest I/list 내용 확인 함수 :﹕ [1 2 3 , 4 5 3 ]
10-11 23:46:34.115 11034-11034/com.example.admin.sqltest I/﹕ 버튼 호출됨
10-11 23:46:34.116 11034-11034/com.example.admin.sqltest I/﹕ updateDB() 함수 호출
10-11 23:46:34.142 11034-11034/com.example.admin.sqltest W/버튼 에러﹕ Attempt to invoke interface method 'java.sql.ResultSet java.sql.Statement.executeQuery(java.lang.String)' on a null object reference
이 녀석이 문제인 듯 합니다
소스이구요.
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=4";
;
@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("", "버튼 호출됨");
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);
}
// conn.close();*/
Log.i("list 내용 확인 함수 : ", "" + list);
}
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);
Statement stmt = conn.createStatement();
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, "");
}
};
}