sqlite jdbc

프로그램/Java 2008.09.23 18:06

java에서 sqlite를 사용하기 위해서는 jdbc type4를 제공하는 jar 파일이 있어야 한다.

그래야만 순수 java만으로 sqlite를 사용할수 있다.

해당 jar 파일은 http://www.zentus.com/sqlitejdbc/ 여기에서 받을수 있습니다.



- 예제소스 -
import java.sql.*;

public class Test {
  public static void main(String[] args) throws Exception {
      Class.forName("org.sqlite.JDBC");
      Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
      Statement stat = conn.createStatement();
      stat.executeUpdate("drop table if exists people;");
      stat.executeUpdate("create table people (name, occupation);");
      PreparedStatement prep = conn.prepareStatement(
          "insert into people values (?, ?);");

      prep.setString(1, "Gandhi");
      prep.setString(2, "politics");
      prep.addBatch();
      prep.setString(1, "Turing");
      prep.setString(2, "computers");
      prep.addBatch();
      prep.setString(1, "Wittgenstein");
      prep.setString(2, "smartypants");
      prep.addBatch();

      conn.setAutoCommit(false);
      prep.executeBatch();
      conn.setAutoCommit(true);

      ResultSet rs = stat.executeQuery("select * from people;");
      while (rs.next()) {
          System.out.println("name = " + rs.getString("name"));
          System.out.println("job = " + rs.getString("occupation"));
      }
      rs.close();
      conn.close();
  }
}
신고


http://www.ch-werner.de/javasqlite/
 여기에서

javasqlite-20080420-win32.zip 을 받습니다.

압축을 풀어보면 j2sdk1.4.2_03 디렉토리가 있고 그 안에는 jre 디렉토리가 있습니다.

다시 jre 디렉토리 안에는 bin, lib 디렉토리가 있는데 이 2개의 디렉토리를 프로젝트에서 사용하는 jre에 복사해서 넣어주시면 됩니다.

-- 샘플 소스 --

import java.sql.*;

public class test {
 public static void main(String[] args) {
  try {
   Class.forName("SQLite.JDBCDriver");
   String url = "jdbc:sqlite:/D:/project2/workspace/sqlite_test/test/test_db";
   Connection db = DriverManager.getConnection(url);
   Statement st = db.createStatement();
   
   ResultSet rs = st.executeQuery("SELECT * FROM test_tbl");
   System.out.println("Outout : ");
   while(rs.next()) {
    System.out.println(rs.getString("id") + " <----> " + rs.getString("pw"));
   }
   db.close();
  } catch(ClassNotFoundException e) {
   System.err.println("Error : " + e);
  } catch(SQLException e) {
   System.err.println("Error : " + e);
  }
 }
}

신고


1. 자주 사용하고 절대 변하지 않는 변수는 final static으로 선언

 - 자주 변경되지 않고 경우의 수가 단순한 쿼리 문장이 있다면 final static이나 static으로
   선언하여 사용하면 좋습니다.

2. 설정 파일 정보도 static으로 관리

 - 요즘 자바 기반의 개발을 할 때 보면 엄청나게 많은 설정 파일들이 존재합니다. 만약 클래
   스의 객체를 생성할 때마다 설정 파일을 로딩하면 엄청난 성능 저하가 발생하게 됨.

3. 코드성 데이터는 DB에서 한 번만 읽도록 합니다.

 - 테이터의 양이 많고 자주 바뀔 확률이 높은 코드 같은것을 제외하고는 DB에서 한 번만
   읽어서 관리하는 것이 성능 측면에서 좋습니다.
신고


for(int i=0;i<v.size();i++) {
          ......
}

위의 예제를 보면 별로 이상하다고 느끼지 모르겠지만 이렇게 코딩을 하는 습관은 좋지 않습니다. 이유는 매번 반복하면서 v.size() 메소드를 호출하기 때문입니다.

이럴때는 다음과 같이 수정을 해줍니다.

int size = v.size();
for(int i=0;i<size;i++) {
     ...........
}

이렇게 해주면 v.size()를 매번 수행하지 않으므로 더 빠르게 처리가 됩니다.
신고


1. String

   - 세 가지 클래스 중에서 가장 메모리르 많이 차지하고 응답 시간에 많은 영향을 줌.
   - 짧은 문자열에 주로 사용.(한줄정도)
   - JDK5.0 이상 버젼에서는 컴파일러에서 자동으로 StringBuilder로 변환을 해줘서 효율이
     많이 좋아졌지만 반복 루프를 사용해서 문자열을 더할때에는 효율이 떨어짐.

2. StringBuffer

   - 스레드와 관련이 있을때 사용.

3. StringBuilder

   - 스레드 안전 여부와 상관이 없으면 사용.
   - 메모리 나 응답 시간에 대해서 가장 효율이 좋음.
신고


StringBuilder 클래스는 JDK 5.0에서 새로 추가된 클래스로 단일 스레드에서의 안전성만을 보장합니다. 그렇게 때문에 여러개의 스레드에서 하나의 StringBuilder 객체를 처리하면 문제가 발생하겠죠??

그럼 StringBuilder 클래스에서 가장 많이 사용하는 메소드 append(), insert(), toString()에 대해서 알아보겠습니다.

append() : 기존의 값의 맨 끝에 엄어온 값을 덧붙이는 작업을 수행합니다.

insert() : 지정된 위치 이후에 넘어온 값을 덧붚이는 작업을 수행합니다. 지정한 위치까지
             값이 없으면 에러가 발생합니다.

toString() : append() 혹은 insert() 메소드를 통해 문자열을 더했으면 toString()으로 통해
                더한 문자열을 보여줍니다.

-- 예제
public class test {
   public static void main(String args[]) {
      StringBuilder str = new StringBuilder();
     
      str.append("abcde");
      str.append("12345");

      str.insert(5, "xyz");

      System.out.println(str.toString());
   }
}

위 예제의 결과를 보게 되면 abcdexyz12345 이렇게 출력이 됩니다.

신고


우리가 프로젝트를 개발하면서 가장 많이 쓰게되는 객체는 String 클래스 입니다.

하지만 String 클래스를 잘못 사용하게 되면 메모리상의 문제가 발생하게 되는데 아래 예제를 통해서 알아보도록 하겠습니다.

String strSql = "";

strSql += "select * "
strSql += "from t_user "
strSql += "where user_id = 'test' "

위 예제를 보게되면 String 클래스를 사용해서 쿼리문을 작성하였다. 위에처럼 단지 3줄이라
면 메모리상에 크게 문제가 되지는 않는다. 하지만 대략 400줄이 된다고 했을때 메모리 사용량은 대략 5MB를 사용하게 되고 수행속도 또한 5ms 정도 걸린다.

그럼 다음 예제를 보겠다. 이 예제는 String 클래스 대신에 StringBuilder 클래스를 사용한 경우이다.

StringBuilder strSql = new StringBuilder();

strSql.append("select * ");
strSql.append("from t_user ")
strSql.append("where user_id = 'test' ");

String 클래스와 같은 쿼리문으로 위와같은 형태 400줄이라고 한다면 이때 메모리 사용량은 대략 400KB 정도 사용하게 되고, 수행속도 또한 0.3ms 정도로 String 클래스를 사용했을때보다 성능이 매우 좋다.

위 결과가 말해주듯이 가장 많이 쓰이는 String 클래스 이지만 잘못알고 쓰게되면 이렇게 큰 오류를 범하게 된다. 지금이라도 그렇게 작업을 하고 있는 개발자가 있다라면 빨리 수정하시길..
신고


sun.com
가서 JDK 리눅스 버전을 다운 받는다.

jdk-6u3-linux-i586.bin

 

설치할 곳에 파일을 이동&카피

/usr/local/ 에 설치 할 예정

설치전에 chmod 755로 변경

/usr/local 이동 후 설치

설치 하면 폴더명이 JDK_3_~` 이런식인데.. 그냥 편하게 하기 위해 폴더명을 java로 변경

보통 리눅스 설치 시 java가 설치 되어 있으며 자동으로 path 가 잡혀있다. 이놈을 제거 하자

자동으로 path 가 잡히는 것은 /usr/bin 안에 java path 파일이 있다.
이놈이 /etc/profile 에서 불려서 되는 듯
/usr/bin 안에 있는 java 파일 과감히 삭제

#vi /etc/profile 에 패스 설정을 한다.

JAVA_HOME=/usr/local/java

CLASSPATH=.:$JAVA_HOME/lib/tools.jar

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

export JAVA_HOME CLASSPATH

export PATH

 

저장 후 설정파일 다시 실행

#source /etc/profile
신고

티스토리 툴바