JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. 

개요

JDBC는, JDK 1.1 버전 이래 Java Standard Edition 의 일부였습니다. JDBC 클래스는, Java 패키지 java.sql에 포함됩니다. 버전 3.0으로부터 시작해, JDBC는 Java Community Process에서 개발되었습니다. JSR 54는 JDBC 3.0(J2SE 1.4에 포함되어있음)을 명세하고 있으며, JSR 114는 JDBC Rowset을 추가로 명세하고 있습니다. 그리고, JSR 221은 JDBC 4.0를 명세합니다 (Java SE 6에 포함되어있음) [1]

JDBC는 Java로 작성된 프로그램을, 일반 데이터베이스에 연결하기 위한 응용프로그램 인터페이스 규격입니다. 이 응용프로그램 인터페이스는 데이터베이스 관리 시스템에 넘겨질 SQL 형태의 데이터베이스 접근요구 문장을, 각 시스템에 맞도록 바꾸어줍니다. API는 동적으로 올바른 Java 패키지를 로드하고, JDBC 드라이버 매니저에 등록하기 위한 메커니즘을 제공합니다. 드라이버 매니저가, JDBC connection을 생성하기 위한 connection factory로서 사용됩니다.

JDBC connection는, 명령문을 만들고, 실행하는 것을 지원합니다. 명령문은 SQL의 CREATE, INSERT, UPDATE, DELETE와 같이 갱신을 위한 명령문일 수도 SELECT와 같이 검색을 위한 명령문일 수도 있습니다. 게다가, 저장 프로시저(stored procedure : 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합)는 JDBC connection을 통해 호출될 수 있습니다. JDBC는 아래 나오는 클래스 중 하나를 사용하는 명령문들을 나타냅니다:

  • Statement – the statement is sent to the database server each and every time.
  • PreparedStatement – the statement is cached and then the execution path is pre determined on the database server allowing it to be executed multiple times in an efficient manner.
  • CallableStatement – used for executing stored procedures on the database.

INSERT, UPDATE와 DELETE와 같은 갱신을 위한 명령문은, 명령문에 의해 영향을 받은 데이터베이스 열의 개수를 반환합니다. 이러한 명령문은, 위의 정보 외에는 반환하지 않습니다.

검색을 위한 명령문은 Resultset을 반환합니다.

[편집]버전 역사

JDBC API 역사
JDBC version발표자바 플랫폼중요한 변화
JDBC 4.0 JavaEE 6 예정 JSR 221
JDBC 3.0 JavaEE 5 JSR 54
JDBC 2.0
JDBC 1.0 J2SE 1.1


===============================================================================================

ODBC(Open DataBase Connectivity)는 마이크로소프트가 만든, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로, 각 데이터베이스의 차이는 ODBC 드라이버에 흡수되기 때문에 사용자는 ODBC에 정해진 순서에 따라서 프로그램을 쓰면 접속처의 데이터베이스가 어떠한 데이터베이스 관리 시스템에 관리되고 있는지 의식할 필요 없이 접근할 수 있다. 



===================================================================================




import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

class Java_Mysql
{
 public static void main(String[] args)
 {
  Connection con;

  try
  {
   Class.forName("com.mysql.jdbc.Driver");
  }
  catch (ClassNotFoundException e)
  {
   System.err.println("드라이버 연결 에러.");
  }

  try
  {
   String url = "jdbc:mysql://www.tomeii.com/mudchobo";
   con = DriverManager.getConnection(url,"ID", "PASSWORD");
   Statement stmt = con.createStatement();
   ResultSet rs = stmt.executeQuery("SELECT * FROM Member_List");

   while (rs.next())
   {
    System.out.print(rs.getString("ID") + " ");
    System.out.print(rs.getString("Password") + " ");
    System.out.print(rs.getString("Name") + " ");
    System.out.print(rs.getString("Age") + " ");
    System.out.print(rs.getString("Sex") + " ");
    System.out.print(rs.getString("Tel") + " ");
    System.out.println();
   }

   rs.close();
   stmt.close();
   con.close();
  }
  catch (SQLException e)
  {
   System.err.println("SQL에러.");
  }
 }
}
[/code]
우선 JAVA와 연동하기 위해서는 JDBC가 필요하다. MYSQL 홈페이지가면 받을 수 있다.
http://www.mysql.org/downloads/connector/j/

이 파일을 자바가 설치된 폴더에 JRE\LIB\EXT\ 폴더에 복사한다.


java.sql.sqlexception : before start of result set

 

DB에서 데이터를 가져오는 쿼리 결과로 ResultSet 객체를 리턴받는데...

 

그 객체를 통해서 데이터를 뽑아내기 위해서 next()라는 메소드를 호출해야 한다.

 

이를 하지 않았을 경우에 before start of result set 에러가 발행한다.

 

이때는....

 

에러가 난 부분에 next()함수를 추가해 주면 해결 할 수 있다...


출처 - http://blog.naver.com/PostView.nhn?blogId=iifing&logNo=10082861106&redirect=Dlog&widgetTypeCall=true


===================================================================================


java.sql.SQLException: Operation not allowed after ResultSet closed 

이 오류는 여러 경우에 날 수도 있지만

다음의 경우를 조심하자

 

ResultSet rs1 ...

ResultSet rs2 ...

 

두개의 ResultSet을 생성해서 어떤 쿼리를 실행시

 

Statement stmt ...

 

의 하나의 Statement  객체를 실행해서

rs1 = stmt.executeQuery(query1);

rs2= stmt.executeQuery(query2);

 

이렇게 두개의

ResultSet  을 처리하려 할때 생긴다

 

따라서 해결 방법은 간단하다는 걸 알 수 있다...

Statement  객체 하나를 만들어 따로 따로 처리를 하면 된다.....


출처 - http://blog.naver.com/PostView.nhn?blogId=hjc426&logNo=130023407937&redirect=Dlog&widgetTypeCall=true



Posted by linuxism
,