[완료] JDBC, resultset을 client로 전송하기.

nephro의 이미지

안녕하세요?
진료단에서 사용중인 APM을 이용한 진료프로그램을 자바로 바꾸려고 공부하는 중입니다.
전문분야가 전혀 다르기때문에 책을 사놓고 뒤적이면서 힘겹게 진행중입니다 -_-

3 tire model로 프로그래밍하고 있는데, 서버측에서 얻어진 DB resultSet을 client로 전송하려고 합니다.
client에서는 resultSet을 풀어서 화면에 표시하구요.

ObjectOutputStream, ObjectInputStream을 이용해서 TCP 소켓으로 class 인스턴스를 넘기는것까지는 성공했습니다.
그런데 resultSet을 class에 담아서 보내려했지만 잘 안되네요.

제 생각에는
1. resultSet을 통째로 옮기고 client에서 푸는게 제일 좋아보입니다.
2. 안된다면 resultSet을 서버측에서 풀어서 LinkedList 에 다시 담아 client로 보내는 것도 있을것 같구요..
(LinkedList변환도 복잡할것 같아요.. ㅠ.ㅠ)
3.정 안되면 각 row를 매번 class에 옮겨 담아서 전송해줘야 할까요?

혹시 첫번째 방법으로 전송할수 있을런지요?
미리 감사드립니다.

turningPoint의 이미지

안녕하세요.
ObjectOutputStream 과 ObjectInputStream을 이용하신다는것을 보니 송수신 측이 전부 Java로 작성되어있나 보군요.

Java관련 일을 손 놓은지 좀 되서 벌써 가물가물 합니다만, 일단 ObjectOutputStream을 이용하신다는 가정하여 (Java to Java) 말씀 드리겠습니다.
ResultSet Class는 Serialable interface로 구현되어 있지 않습니다.

좀 쉽게(?) 표현하자면 이말은 제가 서류가방에 종이를 찌그려 넣고 나중에 끄낼때 다시 그 형태를 원복 할 수 없다는 이야기가 되겠구요. 물론 아시겠죠. :-)
그래서 아주 먼 예전 기억으로는 RowSet Class를 사용하였습니다.
Java Bean 형태로 reflection을 이용하여 setter getter 넣어서 스트림으로 실어 보내고 받는 쪽에서 deserialize 한 기억이 있습니다.

물론 이때 DB class 와 Bean Class O/R Mapping이 되어 있어야겠죠.

공부하시는 중이라고 하시고 현재 Client <-> Server 가 Java로 되어 있는듯 하니 아예 이참에 JRMP를 이용한 RMI을 써 보시는건 어떠신지요?
만약, 그러기엔 시간적 제약이 따르신다면 우선 먼저 입출력 스트림을 socket이 아닌 file을 대상으로 테스트 해보시는걸 권장합니다.

nephro의 이미지

구글링 마구마구 하다보니, ResultSet 자체로는 전송불가라는 글이 있더군요.
님의 말씀이 맞습니다.
전 주로 데비안 시스템에서 작업하고, 우리 팀들은 모두가 MS윈도우 환경이라, 시스템 독립적인 프로그램을 생각하다가 자바를 떠올렸답니다.

Bean 이야기도 간간이 나오던데, 제가 아직 이해하지 못하고 있구요,
JRMP/RMI도 모르는 이야기인데 책을 찾아보도록 하겠습니다.
답변에 감사드립니다.

일단은 쉬운 세팅으로 ResultSet을 class 배열에 담아 보내볼 생각입니다.
감사합니다.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.