์ค๋น
ํฌ์คํ ํ๊ธฐ ์์ ์์ ๊ธฐ๋ณธ์ ์ธ ์ค๋น๋ ํด๋ฌ์ผ ์งํ์ด ๊ฐ๋ฅํ๋ค
๋ด ๋ธ๋ก๊ทธ ํฌ์คํธ์ค์ MSSQL์ ์ฐ๊ฒฐํ๋ ๊ณผ์ ์ ์ ๋ ํ ํ์๊ฐ ์๋ค.
ํด๋ด์ผ JDBC ๋๋ผ์ด๋ฒ ์ฑํฌํ๋ ๊ฑฐ๋ ์ธํฐ๋ท ์ฌ์ฉ ํผ๋ฏธ์ ์๊ตฌํ๋ ๊ฒ์ผ๊บผ๋ค.
์ด์ ์์ ์ ์์ ํ๊ธฐ ์ ๋ฆฌ์คํธ๋ทฐ๋ก ๋์ฐ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ตฌ์ถํด์ผ ํ๋ค.
์ด๋ฏธ ๊ตฌ์ถํ ํ ์ด๋ธ์ด ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ฌ์ฉํด๋ ๋๋ค.
์ต์ง๋ก ๋ฐฐ์ฐ๊ฒ ๋์์ง๋ง, ์๋นํ ์ ์ฉํ๊ฒ ์ฌ์ฉ์ค์ธ MSSQL..
์์ ์ฉ์ผ๋ก ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋ง๋ค์ด๋ณด๊ฒ ๋ค.
DB๋ง๋ค๊ณ
ํ ์ด๋ธ ๋ง๋ค๊ณ (ํ์์ ๊ฒฝ์ฐ ์๋ก์ด ๋ฐ์ดํฐ ์ ๋ ฅ์ ์๋์ผ๋ก ๊ณ ์ ๋ฒํธ๋ฅผ ๋ถ์ฌํ๊ธฐ ์ํด studentNumํ๋์ IDENTITY ์์ฑ์ ๋ฃ์ด์คฌ๋ค.)
๋๋ฝ๊ฒ ๋์ถฉ ์ ๋ ฅํ ๋ ์ฝ๋๋ค..
์ฌํผ ์ด์ ๋๋ก ๋ง๋ค์ด ์คฌ๋ค๋ฉด ์ค๋น๋ฌผ์ ์์ฑ์ด๋ค.
์์
์ด์ ์์ ์ ์์ํ๊ฒ ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฐ์ดํฐ๋ค์ ๋์ฐ๊ธฐ ์ํ ๋ฆฌ์คํธ๋ทฐ๋ฅผ ๋จผ์ ๋ง๋ค์ด ๋์
(์ฐธ๊ณ ๋ก ํ์๋ ๋น ๋ฅธ ์์ ์ ์ํด ๋ฆฌ์คํธ๋ทฐ ์ฃผ๋ณ์ ๋ฒํผ๊ฐ์๊ฑฐ ์ค์นํด์ ๋ฉ์ง ํ๋ก๊ทธ๋จ์ผ๋ก ๋ง๋ค ์๊ฐ์ ์ ํ ์๋ค.
๊ทธ๋ฅ ์ปค์คํ ๋ฆฌ์คํธ๋ทฐ์ MSSQL ๋ฐ์ดํฐ๋ฅผ ๋์ฐ๋ ๋ชฉ์ ์ผ๋ก๋ง ์งํํ ๊ฒ์ด๋ค.)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
>
<ListView
android:id="@+id/lv_studentList"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
๊ทธ๋ฆฌ๊ณ ์ปค์คํ ๋ฆฌ์คํธ๋ทฐ์ ๋ค์ด๊ฐ ์์ดํ ์ ๋งจ๋ค์.
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_studentName"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:textSize="20dp"
android:text="๊นํ์"
/>
<TextView
android:id="@+id/tv_studentAddress"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginLeft="30dp"
android:text="๊ฒฝ๊ธฐ๋ ๊ณ ์์ ๋ก๋ก๋ก๋ก"
android:textSize="20dp"
/>
</LinearLayout>
</LinearLayout>
์ด์ ์ฝ๋ฉ์ ์์ํ๊ธฐ ์ํด 2๊ฐ์ง ํด๋์ค ํ์ผ์ ์ถ๊ฐํด๋ฌ์ผํ๋ค.
ListViewAdapter๋ ์ปค์คํ ๋ฆฌ์คํธ๋ทฐ์ ์ด๋ค ๋ฐฐ์ด๋ค์ ์ ์ฉํ๊ณ ์ด๋ค ์์ดํ ๋ ์ด์์์ ์ธํ๋ ์ดํธํ ์ง ๋์์ฃผ๋
์ฌ์ฉ์ ์ ์ ํด๋์ค์ด๋ค. ๊ทธ๋ฆฌ๊ณ
ListViewAdapterData๋ ๋ฆฌ์คํธ๋ทฐ์ ๋์ธ ์์ดํ ์ ๋ํ ๊ฐ๋ค์ ์ ์ฅํด์ผ ๋๋๋ฐ ๊ทธ ๊ฐ๋ค์ ์ด ํด๋์ค์ ๊ฐ์ฒด์ ์ ์ฅํ๊ณ ๊ทธ๊ฒ์ ์ด์ฉํ์ฌ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๊ทธ ๋ฐฐ์ด์ ๋ฆฌ์คํธ๋ทฐ์ ์ ์ฉํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
๋ชจ๋ฅด๊ฒ์ผ๋ฉด ๊ทธ๋ฅ ๋ฐ๋ผํ๋๊ฐ CustomListView์ ๋ํด ์์๋ณด๊ณ ์ค๋๋ก ํ์.
์ฐ์ ListViewAdapterData.java
package com.example.mssqllistviewtest;
public class ListViewAdapterData {
private int iStudentNum;
private String sStudentName;
private String sAddress;
public int getiStudentNum(){return iStudentNum;}
public String getsStudentName(){return sStudentName;}
public String getsAddress(){return sAddress;}
public void setiStudentNum(int studentNum){this.iStudentNum= studentNum;}
public void setsStudentName(String studentName){this.sStudentName = studentName;}
public void setsAddress(String address){this.sAddress = address;}
}
๊ทธ๋ฆฌ๊ณ ListViewAdatper.java
package com.example.mssqllistviewtest;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class ListViewAdapter extends BaseAdapter {
TextView tvStudentName, tvAddress; //์์ดํ
๋ ์ด์์์ ์กด์ฌํ๋ ํ
์คํธ๋ทฐ 2๊ฐ๋ฅผ ๋ด์์ฌ ๊ฐ์ฒด
ArrayList<ListViewAdapterData> arryListDO = new ArrayList<ListViewAdapterData>(); //๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์์จ ๊ฐ๋ค์ ๋ฆฌ์คํธ๋ทฐ์ ๋์ฐ๊ธฐ ์ํด ๋ฐฐ์ดํ ์์ผ ์ ์ฅ
@Override
public int getCount() {
return arryListDO.size(); //๋ฐฐ์ด์ ํฌ๊ธฐ ๋ฐํ
}
@Override
public Object getItem(int position) {
return arryListDO.get(position); //๋ฆฌ์คํธ๋ทฐ๋ฅผ ํด๋ฆญํ ๋ ์ฌ์ฉํ๋๋ฐ ํด๋ฆญํ ๋ฆฌ์คํธ๋ทฐ์ ํฌ์ง์
๊ฐ์ ๋ฐ์์ ๋ฐฐ์ด์์ ํด๋นํ๋ ์์ดํ
์ ๊ฐ์ ธ์ด
}
@Override
public long getItemId(int position) {
return position; //์์น๊ฐ ๋ฐํ
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
final Context context = viewGroup.getContext(); //์ด ๋ฆฌ์คํธ๋ทฐ๊ฐ ์๋๋ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //๋ฆฌ์คํธ๋ทฐ์ ์์ดํ
์ ์ธํ๋ ์ดํธ ํด์ผํจ
view = inflater.inflate(R.layout.item,viewGroup,false); //์ธํ๋ ์ดํธ ํ ํด๋น ์์ดํ
์ view ์ ๋ด๊ณ
tvStudentName = (TextView) view.findViewById(R.id.tv_studentName); //ํด๋น ์์ดํ
์ ํ
์คํธ ๋ทฐ๋ค์ ๊ฐ์ ธ์ด
tvAddress = (TextView) view.findViewById(R.id.tv_studentAddress);
ListViewAdapterData ldo = arryListDO.get(position); //์์น์ ๋ฐ๋ผ ๋ฐฐ์ด๋ก๋ถํฐ ๊ฐ์ ธ์ฌ ๊ฐ์ ๊ฐ์ ธ์ ListViewAdapterData๊ฐ์ฒด 1๊ฐ์ ๋ด์
tvStudentName.setText(ldo.getsStudentName()); //๊ทธ ldo์ ๋ค์ด์๋ ๊ฐ๋ค์ ๊ฐ ๋ทฐ์ ์ ์ฉ์ํด
tvAddress.setText(ldo.getsAddress());
return view;
}
//๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๊ฐ์ ๋ฐ์๋ค๋ฉด ๊ทธ ๋ ์ฝ๋ ์๋งํผ ์ํํ๋ฉฐ ๋ฐฐ์ด์ add๋ฅผ ํด์ค์ผํจ
public void addItem(int studentNum, String studentName, String address){
ListViewAdapterData ldo = new ListViewAdapterData(); //arryListDO ๋ฐฐ์ด์ addํ AdapterData๊ฐ์ฒด ํ๋๋ฅผ ๋ง๋ฆ.
ldo.setiStudentNum(studentNum); //AdapterData๊ฐ์ฒด์ ์ ์ฉ
ldo.setsStudentName(studentName);
ldo.setsAddress(address);
arryListDO.add(ldo); //arryListDO๋ฐฐ์ด์ AdapterData๊ฐ์ฒด๋ฅผ ์ถ๊ฐ
}
}
adapter์ ๊ฒฝ์ฐ ์ต์ํด์ง๋ฉด ์ฝ์ง๋ง ์ฒ์์๋ ํ์๋ ๊ฝค ์ด๋ ค์ ๋ค.
์ด์ ๋ฆฌ์คํธ๋ทฐ๋ ๋ง๋ค์๊ณ ,
์ด ๋ฆฌ์คํธ๋ทฐ์ ์์ดํ ์ ์ถ๊ฐํ ์ฅ์น๋ ๋ง๋ค์์ผ๋,
ํ๋์ ๋ง๋ค ์ผ๋ง ๋จ์๋ค.
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.ListView;
import android.widget.Toast;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
ListViewAdapter adapter = new ListViewAdapter();
ListView listView;
private static String ip = "172.30.1.26"; //์ ์ํ ์๋ฒ์ธก์ IP, ํ์ฌ๋ ๋ก์ปฌ์์ ์งํํ๋ ์ด ์ปดํจํฐ์ IP์ฃผ์๋ฅผ ํ ๋นํ๋ฉด ๋๋ค.
private static String port = "49670"; //SQL ๊ตฌ์ฑ ๊ด๋ฆฌ์์์ TCP/IP ๊ตฌ์ฑ ์ค ๋ชจ๋ IPํฌํธ๋ฅผ ์ค์ ํ๋ ๊ตฌ๊ฐ์์ ๋์ ํฌํธ๋ฅผ ์ ์ผ๋ฉด ๋๋ค.
private static String Classes = "net.sourceforge.jtds.jdbc.Driver";
private static String database = "AndroidTestDB"; //์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ
private static String username = "KJW"; //์๋ฒ์ ID PW
private static String password = "qwer";
private static String url ="jdbc:jtds:sqlserver://"+ip+":"+port+"/"+database;
private Connection connection = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.lv_studentList);
//StrictMode๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋ฉ์ธ์ค๋ ๋์์ ๋์ํ ์์ ์ธ๋ฐ ์ด๋ก ์ธํด ์๋๊ฐ ๋๋ ค์ง๋ ๊ฒ์ ๊ฐ์งํ๊ณ
//Android Not Response๋ฅผ ๋ฐฉ์งํ ์ ์๋๋ก ๋ฏธ๋ฆฌ ํ์งํ๋ ์ญํ ์ ํจ
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
//์ฐ๊ฒฐ์๋
Class.forName(Classes); //jdbc๋๋ผ์ด๋ฒ ํด๋์ค ์ ์ฉ
connection = DriverManager.getConnection(url,username,password);
Toast.makeText(this,"์ฐ๊ฒฐ์ฑ๊ณต",Toast.LENGTH_LONG).show();
} catch (ClassNotFoundException e) {
e.printStackTrace();
Toast.makeText(this,"Class๋ฅผ ์ฐพ์ ์ ์์",Toast.LENGTH_LONG).show();
}catch (SQLException e){
Toast.makeText(this,"์ฐ๊ฒฐ์คํจ",Toast.LENGTH_LONG).show();
}
DisplayListView();
}
public void DisplayListView() {
String qry = "SELECT * FROM studentTbl";
if(connection != null){
Statement statement = null;
try {
statement = connection.createStatement();
//์ฟผ๋ฆฌ๋ฌธ์ ์ด์ฉํด ๊ฐ์ ธ์ฌ ๋ฐ์ดํฐ๊ฐ์ ์ ํ๋ค.
ResultSet resultSet = statement.executeQuery(qry);
while(resultSet.next()){
//๊ฐ์ ธ์จ ๋ชจ๋ ๊ฐ๋ค์ next()๋ฉ์๋๋ก ๋ชจ๋ ์ํํ์ฌ ๋์ฐ๋๋ก ํ๋ค.
adapter.addItem(resultSet.getInt(1),resultSet.getString(2),resultSet.getString(3));
//๋งจ ์์ ํ๋๊ฐ 1, ๊ทธ ๋ค์์ด 2..
}
listView.setAdapter(adapter);
} catch (SQLException e) {
e.printStackTrace();
}
}else{
Toast.makeText(this,"์ฐ๊ฒฐ ์์ ์คํจ",Toast.LENGTH_LONG).show();
}
}
}
๊ฒฐ๊ณผ
์ค๋ฅ๊ฐ ๋๋ค๋ฉด ํ ์คํธ๋ฉ์์ง์ ์ํ์ ๋ฐ๋ผ ์กฐ์น๋ฅผ ์ทจํ๋ฉด ์ข๊ฒ ๋ค.
๋ณดํต ์ ๋ฒ์๊ฐ์ ์๋ ค์ค ๋ด์ฉ ์ค ๋งค๋ํ์คํธ์์ ์ธํฐ๋ท ํผ๋ฏธ์ ์๊ตฌํ๋๊ฑฐ๋
build.gradle์์ jdbc ๋๋ผ์ด๋ฒ๋ฅผ ์ฑํฌํด์ผ ํ๋ ๊ฒ์ ๊น๋นกํ ๊ฒ์ผ ์ ๋ ์๋ค.
์ธํฐ๋ท ํผ๋ฏธ์ ์๊ตฌํ๋๊ฑฐ๋
build.gradle์์ jdbc ๋๋ผ์ด๋ฒ๋ฅผ ์ฑํฌํด์ผ ํ๋ ๊ฒ์
์ธํฐ๋ท ํผ๋ฏธ์ ์๊ตฌ
build.gradle์์ jdbc ๋๋ผ์ด๋ฒ๋ฅผ ์ฑํฌ