データベース
日本語 | 情報基底 |
英語 | database |
ふりがな | でーたべーす |
フリガナ | データベース |
データの格納庫。
データを保存するためのアプリケーション。通常はサーバーのように常駐させ、他のアプリケーションからの要求に応えてデータを渡したり変更したりする。
通常のファイルに保存するのに比べて「SQLという共通言語でアクセスできる」「プログラムを組まなくてもSQLを使えばアクセスできる」「ユーザー名とパスワードによるデータの管理ができる」「排他処理による同期が取れるため複数のアプリケーションからのアクセスに対応できる」「トランザクション処理により異常が発生した場合に元に戻すことができる」「設定の変更やバックアップのための専用ツールが付属している」といったメリットがある。
現在、最も一般的なデータベースはOracleである。デファクトスタンダードと言ってもいいくらい広範囲に使用されている。また、Microsoft SQL ServerとIBM DB2も各社の知名度を生かしてよく使われている。
これらは商用データベースと呼ばれ、多くの業務に使用されているが、高価である。
対して、フリー、つまり無料のデータベースにPostgreSQLとMySQLがある。この2つのデータベースは無料であり、低コストで導入できるサーバーとして多く使われている。
ただし、実際の業務に関しては無料であることは必ずしもメリットではない。サポートが受けられないという具体的なデメリットや、企業に導入するためには有料でなくてはならない、という政治的な理由、もしくは有料でないと不安、といった宗教的理由も存在する。
本辞書では、導入の簡易さからhsqldbを使用してサンプルコードを記述している。この使用方法については「SQL」の項目を参考のこと。
上記の説明は狭義の意味であり、正しくは「リレーショナルデータベース」と呼ばれる。
一般にデータベースと言えば「リレーショナルデータベース」の事を指すが、広義にはカード型データベースやXMLデータベースも存在する。
しかし、SQLのメリット等を考えると当分の間は「データベース」は「リレーショナルデータベース」の事を指すことになるだろう。
データを保存するためのアプリケーション。通常はサーバーのように常駐させ、他のアプリケーションからの要求に応えてデータを渡したり変更したりする。
通常のファイルに保存するのに比べて「SQLという共通言語でアクセスできる」「プログラムを組まなくてもSQLを使えばアクセスできる」「ユーザー名とパスワードによるデータの管理ができる」「排他処理による同期が取れるため複数のアプリケーションからのアクセスに対応できる」「トランザクション処理により異常が発生した場合に元に戻すことができる」「設定の変更やバックアップのための専用ツールが付属している」といったメリットがある。
現在、最も一般的なデータベースはOracleである。デファクトスタンダードと言ってもいいくらい広範囲に使用されている。また、Microsoft SQL ServerとIBM DB2も各社の知名度を生かしてよく使われている。
これらは商用データベースと呼ばれ、多くの業務に使用されているが、高価である。
対して、フリー、つまり無料のデータベースにPostgreSQLとMySQLがある。この2つのデータベースは無料であり、低コストで導入できるサーバーとして多く使われている。
ただし、実際の業務に関しては無料であることは必ずしもメリットではない。サポートが受けられないという具体的なデメリットや、企業に導入するためには有料でなくてはならない、という政治的な理由、もしくは有料でないと不安、といった宗教的理由も存在する。
本辞書では、導入の簡易さからhsqldbを使用してサンプルコードを記述している。この使用方法については「SQL」の項目を参考のこと。
上記の説明は狭義の意味であり、正しくは「リレーショナルデータベース」と呼ばれる。
一般にデータベースと言えば「リレーショナルデータベース」の事を指すが、広義にはカード型データベースやXMLデータベースも存在する。
しかし、SQLのメリット等を考えると当分の間は「データベース」は「リレーショナルデータベース」の事を指すことになるだろう。
// Sample.java
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Sample
{
public static void main( String[] args )
{
Connection conn = null;
PreparedStatement psCreate = null;
PreparedStatement psInsert = null;
Statement stmt = null;
ResultSet rs = null;
try
{
// ■データベース毎の違い。
// まず、データベース毎にJDBCドライバの名前が異なります。
// 下記の例はhsqldbの例です。
Class.forName( "org.hsqldb.jdbcDriver" );
// 次にURLが異なります。URLはデータベースが置いてあるマシンの
// 名前やIPアドレスや、データベース内の情報カテゴリの名前等を
// 指定します。データベースによってはこれらの設定を記述する
// ファイルも存在します。Oracleならtnsnames.ora、のように。
String url = "jdbc:hsqldb:mem:aname";
String user = "sa";
String password = "";
conn = DriverManager.getConnection( url, user, password );
// テーブルは、型が異なる場合が多くあります。データベース内の
// 各型の構造や、型の名前がデータベース毎に異なるため、
// これは必ず確認しましょう。
psCreate = null;
final String SQL_CREATE = "CREATE TABLE TABLE_TEST( NAME VARCHAR, VALUE INT );";
psCreate = conn.prepareStatement( SQL_CREATE );
psCreate.execute();
// 通常のSQLは基本的に差異はないはずです。
// ただし、トランザクションまわりは細かい違いが出てくる場合が
// あります。
final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );";
psInsert = conn.prepareStatement( SQL_INSERT );
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
psInsert.setString( 1, "ネーム" + iF1 );
psInsert.setInt( 2, iF1 );
psInsert.execute();
}
// SELECT等もあまり違いはないでしょう。
stmt = conn.createStatement();
final String SQL_SELECT = "SELECT NAME, VALUE FROM TABLE_TEST;";
rs = stmt.executeQuery( SQL_SELECT );
while( rs.next() )
{
String name = rs.getString( "NAME" );
int value = rs.getInt( "VALUE" );
System.out.println( name + ", " + value );
}
// ネーム0, 0
// ネーム1, 1
// ネーム2, 2
}
catch( SQLException e )
{
// SQLの実行で問題があった場合に投げられます。
e.printStackTrace();
}
catch( ClassNotFoundException e )
{
// JDBCドライバが存在しなかった場合に投げられます。
e.printStackTrace();
}
finally
{
if( rs != null )
{
try
{
rs.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( stmt != null )
{
try
{
stmt.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psInsert != null )
{
try
{
psInsert.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psCreate != null )
{
try
{
psCreate.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( conn != null )
{
try
{
conn.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
}
}
}
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Sample
{
public static void main( String[] args )
{
Connection conn = null;
PreparedStatement psCreate = null;
PreparedStatement psInsert = null;
Statement stmt = null;
ResultSet rs = null;
try
{
// ■データベース毎の違い。
// まず、データベース毎にJDBCドライバの名前が異なります。
// 下記の例はhsqldbの例です。
Class.forName( "org.hsqldb.jdbcDriver" );
// 次にURLが異なります。URLはデータベースが置いてあるマシンの
// 名前やIPアドレスや、データベース内の情報カテゴリの名前等を
// 指定します。データベースによってはこれらの設定を記述する
// ファイルも存在します。Oracleならtnsnames.ora、のように。
String url = "jdbc:hsqldb:mem:aname";
String user = "sa";
String password = "";
conn = DriverManager.getConnection( url, user, password );
// テーブルは、型が異なる場合が多くあります。データベース内の
// 各型の構造や、型の名前がデータベース毎に異なるため、
// これは必ず確認しましょう。
psCreate = null;
final String SQL_CREATE = "CREATE TABLE TABLE_TEST( NAME VARCHAR, VALUE INT );";
psCreate = conn.prepareStatement( SQL_CREATE );
psCreate.execute();
// 通常のSQLは基本的に差異はないはずです。
// ただし、トランザクションまわりは細かい違いが出てくる場合が
// あります。
final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );";
psInsert = conn.prepareStatement( SQL_INSERT );
for( int iF1 = 0; iF1 < 3; ++iF1 )
{
psInsert.setString( 1, "ネーム" + iF1 );
psInsert.setInt( 2, iF1 );
psInsert.execute();
}
// SELECT等もあまり違いはないでしょう。
stmt = conn.createStatement();
final String SQL_SELECT = "SELECT NAME, VALUE FROM TABLE_TEST;";
rs = stmt.executeQuery( SQL_SELECT );
while( rs.next() )
{
String name = rs.getString( "NAME" );
int value = rs.getInt( "VALUE" );
System.out.println( name + ", " + value );
}
// ネーム0, 0
// ネーム1, 1
// ネーム2, 2
}
catch( SQLException e )
{
// SQLの実行で問題があった場合に投げられます。
e.printStackTrace();
}
catch( ClassNotFoundException e )
{
// JDBCドライバが存在しなかった場合に投げられます。
e.printStackTrace();
}
finally
{
if( rs != null )
{
try
{
rs.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( stmt != null )
{
try
{
stmt.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psInsert != null )
{
try
{
psInsert.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( psCreate != null )
{
try
{
psCreate.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
if( conn != null )
{
try
{
conn.close();
}
catch( SQLException e )
{
// 各close()メソッドからもSQLException例外が
// 投げられるので、拾っておきます。
e.printStackTrace();
}
}
}
}
}
// Sample.java import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Sample { public static void main( String[] args ) { Connection conn = null; PreparedStatement psCreate = null; PreparedStatement psInsert = null; Statement stmt = null; ResultSet rs = null; try { // ■データベース毎の違い。 // まず、データベース毎にJDBCドライバの名前が異なります。 // 下記の例はhsqldbの例です。 Class.forName( "org.hsqldb.jdbcDriver" ); // 次にURLが異なります。URLはデータベースが置いてあるマシンの // 名前やIPアドレスや、データベース内の情報カテゴリの名前等を // 指定します。データベースによってはこれらの設定を記述する // ファイルも存在します。Oracleならtnsnames.ora、のように。 String url = "jdbc:hsqldb:mem:aname"; String user = "sa"; String password = ""; conn = DriverManager.getConnection( url, user, password ); // テーブルは、型が異なる場合が多くあります。データベース内の // 各型の構造や、型の名前がデータベース毎に異なるため、 // これは必ず確認しましょう。 psCreate = null; final String SQL_CREATE = "CREATE TABLE TABLE_TEST( NAME VARCHAR, VALUE INT );"; psCreate = conn.prepareStatement( SQL_CREATE ); psCreate.execute(); // 通常のSQLは基本的に差異はないはずです。 // ただし、トランザクションまわりは細かい違いが出てくる場合が // あります。 final String SQL_INSERT = "INSERT INTO TABLE_TEST VALUES( ?, ? );"; psInsert = conn.prepareStatement( SQL_INSERT ); for( int iF1 = 0; iF1 < 3; ++iF1 ) { psInsert.setString( 1, "ネーム" + iF1 ); psInsert.setInt( 2, iF1 ); psInsert.execute(); } // SELECT等もあまり違いはないでしょう。 stmt = conn.createStatement(); final String SQL_SELECT = "SELECT NAME, VALUE FROM TABLE_TEST;"; rs = stmt.executeQuery( SQL_SELECT ); while( rs.next() ) { String name = rs.getString( "NAME" ); int value = rs.getInt( "VALUE" ); System.out.println( name + ", " + value ); } // ネーム0, 0 // ネーム1, 1 // ネーム2, 2 } catch( SQLException e ) { // SQLの実行で問題があった場合に投げられます。 e.printStackTrace(); } catch( ClassNotFoundException e ) { // JDBCドライバが存在しなかった場合に投げられます。 e.printStackTrace(); } finally { if( rs != null ) { try { rs.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( stmt != null ) { try { stmt.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( psInsert != null ) { try { psInsert.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( psCreate != null ) { try { psCreate.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } if( conn != null ) { try { conn.close(); } catch( SQLException e ) { // 各close()メソッドからもSQLException例外が // 投げられるので、拾っておきます。 e.printStackTrace(); } } } } }