비교1 Articles

  1. 2007/01/30 비교 체험 C# VS Java 2 (5)

이놈의 귀차니즘 때문에 @.@ 글을.. 쓰고 싶은데 쏘스가 주어지고 해야될일이 생기니 에휴 ~~ 이놈의 핑계~ 어째던 이번에 알아볼 것은 db에 접속 하는것을 알아 보겠다. 그것도 동일한 sql문에 param 값을 설정 하여서 한개의 sql문으로 처리 하는 방법을 해보는 것이다.


자바 소스
import java.sql.*;
public class CallableTest {
 public static void main(String[] args) throws SQLException{
  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql", "root", "apmsetup");
 
  PreparedStatement stmt;
 
  String sqlStr = "select * from db where id=?";
 
  stmt = conn.prepareStatement(sqlStr);
 
  stmt.setInt(1, 10);
 
  ResultSet rs = stmt.executeQuery();
 
  while(rs.next())
  {
   System.out.println(rs.getString(1));
  }
 
  stmt.close();
  conn.close();
 }
}



 

그리고 C# 소스
using System;
using System.Data;
using System.Data.SqlClient;

class SqlParamTest
{
    static void Main(string[] args)
    {
        string connStr = "Provider=MySQLProv;Data Source=mysql;" +
                         "Location=localhost;User Id=root;Password=apmsetup";
        string query = "select * from db where id=@ID";
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        SqlCommand comm = new SqlCommand(query, conn);
        comm.Parameters.Add("@ID", SqlDbType.Int);
        comm.Parameters["@ID"].Value = "10";
        SqlDataReader sr = comm.ExecuteReader();
        while (sr.Read())
        {
            Console.WriteLine(sr.GetInt32(0)));
        }
        sr.Close();
        conn.Close();
    }
}



위의 코드는 솔직히 실행해보지는 못했다. 일단 실행을 할려면 MySql 설치해야 하고, 공급자도 설치해야 하고.. 아마도 자바와 닷넷용 모두 설치해야 할것이다. 그렇다고 MSSql을 설치하기도 그렇고. 그러니 이해해 주시기를 바랍니다 ^^

어째던 DB 접속에 둘다 문제가 없다면 두개의 소스가 비슷한 동작을 할것이다. 일단 둘다 각각의 Connection 객체를 통해 일단 DB에 접속 했다. 그런데 여기서 약간의 차이점은 자바에서는 DBManager 를 사용하여 객체를 생성하고, C#에서는 객체 스스로 생성되었다. 그래서 그런지는 모르겠지만 C#으로는 Connection 객체를 open을 해주는데 자바에서는 해주지 않는다.

그리고 다음은 비슷한 동작을 하는 command == statement 이두 객체가 비슷한 동작을 한다. 커넥션 객체에서 각 쿼리를 실행 하기 위한 Sql명령을 가지고 있는 객체이다. 여기서 바뀌게 되는 파라 미터 값을 command 에서는 @param 으로 구분했고 statement 에서는 ?로 구분했다. 그리고 자바에서는 preparedstatement라는 객체를 따로 만들어야 했으나, C#에서는 command라는 객체의 다른 종류는 없었다.

그리고 데이터를 읽는 것은 각각의 Reader로 읽어 값을 읽었고, 마지막으로 각 파라미터에 값을 넣을때 Java에서는 셋팅을 할때 메서드를 호출에서 ? 순서에 따라 각각의 값을 지정하였고, C#에서는 각 파라미터의 @param를 가지고 셋팅후 값을 대입 2번의 수행을 하였다.

뭐 두개다 큰 차이는 없겠지만 자바에서는 param 들이 ?로 표시되어 각각을 지정하는데 유연함이 조금 떨어질수 있겠지만, C#에서는 2번 셋팅을 해주어야 해서 불편하다는 점이 내가 내린 결론!!



에구에구 오랜만에 쓰는데 왜이리 피곤한지.. 그리고 자바에서는 또 특이하게 callablestatement라는 놈이 있다. 이놈은 preparedstatement라는 놈과는 비슷하지만 다른부분이 있다. 좀더 알아보고 기회가 된다면 다름 글에 이야기 해보겠다.


div>