JAva jdbc接続データベース(mysqlで接続)

10146 ワード

一、JDBC紹介
Javaデータベース接続(Java Database Connectivity、略称JDBC)は、Java言語でクライアント・プログラムがデータベースにアクセスする方法を規範化するアプリケーション・インタフェースであり、データベース内のデータのクエリーや更新などの方法を提供します.JDBCもSun Microsystemsの商標です.JDBCはリレーショナル・データベース向けです.
1、JDBCアーキテクチャ:JDBC APIは2層と3層の処理モデルによるデータベースアクセスをサポートするが、一般的なJDBCアーキテクチャは2層からなる:JDBC API:アプリケーションによるJDBCの管理接続を提供する;JDBC Driver API:JDBCのドライブ接続管理をサポートする;JDBC APIのドライバマネージャとデータベース固有のドライバを使用して、異機種データベースへの透過的な接続を提供します.JDBCドライバマネージャは、複数の異機種データベースに接続された複数の同時ドライバをサポートする正しいドライバが各データソースにアクセスできることを保証します.以下に、ドライバマネージャ側のJDBCドライバとJavaアプリケーションの場所を示す構造図を示します.
2、一般的なJDBCコンポーネント:JDBC APIは以下のインタフェースとクラスを提供している:DriverManager:このクラスはデータベースドライバのリストを管理し、内容がJavaアプリケーションから使用される通信サブプロトコルから正しいデータベースドライバの接続要求に合致するかどうか、JDBCが一定のサブプロトコルの最初のドライブでデータベース接続を確立するために使用されることを識別する.Driver:このインタフェースはデータベース・サーバと通信し、ドライバ・オブジェクトと直接通信することはめったにありません.逆に、Driver Managerのオブジェクトを使用して、このタイプのオブジェクトを管理します.ドライバ・オブジェクトの作業に関する詳細も抽象化します.Connection:このインタフェースはデータベースに接触するすべての方法で、接続オブジェクトは通信コンテキストを表します.すなわち、データベース内のすべての通信は一意の接続オブジェクトを通じています.Statement:このインタフェースを使用して作成されたオブジェクトのSQL文をデータベースにコミットし、一部の派生インタフェースはストレージ・プロシージャを実行するパラメータを受け入れる.ResultSet:これらのオブジェクトはデータベースから保存された後、Statementオブジェクトを使用したSQLクエリを実行してデータを取得し、反復器としてデータを移動できます.SQLException:このクラスの処理はデータベースアプリケーションで発生したエラーです.
二、JDBC接続に必要な基本知識
1、データベースの基本操作、
eg:Mysqlのインストールと基本操作(insert,delete,update,query)
2、java開発ツールの使用、
eg:Eclipse/MyEclipse(mysql-connector-java-5.0.3-bin.jarのインポートを含む)
三、JDBCの接続及びコードデモ
1、JDBC接続ツール類
1)、Configuration.java:.xmlファイルからデータベースの構成情報を接続できます.dom 4 j-1.6.1.jarパッケージを導入する必要があります.
package cn.java.jdbc;

import java.io.InputStream;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Configuration {
	
	private String url;
	private String driver;
	private String username;
	private String password;

	public Configuration() {
	}
	
	public Configuration(String url, String driver, String username,
			String password) {
		super();
		this.url = url;
		this.driver = driver;
		this.username = username;
		this.password = password;
	}
	
	public static Configuration getConfigure()
	{
		
		try {
			InputStream in = Configuration.class.getResourceAsStream("/db.xml");
			if (null!=in) {
				return load(in);
			}
			return null;
		} catch (DocumentException e) {
			e.printStackTrace();
			return null;
		}
		
	}

	private static Configuration load(InputStream in) throws DocumentException {
		SAXReader reader = new SAXReader();
		Document doc = reader.read(in);
		Element jdbc = doc.getRootElement();
		String url = jdbc.element("url").getText();
		String driver = jdbc.element("driver").getText();
		String username = jdbc.element("username").getText();
		String password = jdbc.element("password").getText();
		Configuration cfg = new Configuration(url, driver, username, password);
		return cfg;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getDriver() {
		return driver;
	}

	public void setDriver(String driver) {
		this.driver = driver;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}


}

2)、db.xml:データベースの構成情報を保存する
<?xml version="1.0" encoding="UTF-8"?>
<jdbc>
<url>jdbc:mysql://localhost:3306/test</url>
<driver>com.mysql.jdbc.Driver</driver>
<username>root</username>
<password></password>
</jdbc>

3)、ConnectionFactory.java:JDBC接続ファクトリメソッドの1つ
package cn.java.jdbc;

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

public class ConnectionFactory {
	
	private static ConnectionFactory connectionFactory=null;
	private static Configuration config=Configuration.getConfigure();
	
    private ConnectionFactory()
    {
		try {
		Class.forName(config.getDriver());
	} catch (ClassNotFoundException e) {
	}
    }
    
    public Connection getConnection() throws SQLException
    {
    	
    	Connection con=null;
    	try {
			con=DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());
			
			return con;
		}finally{
			
//			if (null != con) {
//				con.close();
//			}
		}
    	
    }
    
    public static ConnectionFactory getInstance()
    {  
    	if (null==connectionFactory) {
    		connectionFactory=new ConnectionFactory();
		}
    	
		return connectionFactory;
    	
    }

}

4)、ConnectionFactory 2.java:JDBC接続ファクトリメソッドその2
package cn.java.jdbc;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class ConnectionFactory2 {


	private DataSource ds ;

	private static ConnectionFactory2 connectionFactory2 = null;

	private ConnectionFactory2() {
		
		MysqlDataSource myDS = new MysqlDataSource() ;
		myDS.setServerName("localhost");
		myDS.setDatabaseName("test");
		myDS.setPort(3306) ;
		myDS.setUser("root");
		myDS.setCharacterEncoding("utf-8");
		myDS.setPassword("");
		this.ds = myDS ;
	}

	public Connection getConnection() throws SQLException {

		Connection conn = null;
		try {
			conn = ds.getConnection() ;
			conn.setAutoCommit(false);
			return conn;
		} catch (SQLException e) {
			if (null != conn) {
				conn.close();
			}
			throw e;
		}
	}

	public static ConnectionFactory2 getInstance() {

		if (null == connectionFactory2) {
			connectionFactory2 = new ConnectionFactory2();
		}
		return connectionFactory2;

	}

}

5)、User.java:データベーステーブルuserのidとnameのbeanクラスを定義します.ここでidは自動的に増加します.
package cn.java.jdbc;

public class User {
	private int id;
	private String name;
	
	public User() {
	}
	public User(int id, String name) {
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	

}

6)、UserDao.java:userテーブルの操作クラス、insert、delete、update、queryなどの方法を実現
package cn.java.jdbc;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
	private PreparedStatement st = null;
	private ResultSet rs = null;
	
	public UserDao() {
	}
	
	public void insert(	Connection con,String name) throws SQLException,IOException {
		String sql="insert into user(name) values(?) ";
		try{
			st=con.prepareStatement(sql);
			st.setString(1, name);
			st.executeUpdate();
		}finally{
			if (null!=st) {
				st.close();
			}
			
		}
		
	}
	
	public void delete(Connection con,int id) throws SQLException,IOException {
		String sql="delete from user where id=?";
		try{
			st=con.prepareStatement(sql);
			st.setInt(1, id);
			st.executeUpdate();
		}finally{
			if (null!=st) {
				st.close();
			}
			
		}
	}
	
	public void update(	Connection con,int id,String name) throws SQLException,IOException {
		String sql="update user set name=? where id=?";
		
		try{
			st=con.prepareStatement(sql);
			st.setString(1, name);
			st.setInt(2, id);
			st.executeUpdate();
		}finally{
			if (null!=st) {
				st.close();
			}
		}

	}
	
	public User query(Connection con,int index) throws SQLException,IOException{
		User user=new User();
		String sql="select * from user where id=?";
		try{
			st=con.prepareStatement(sql);
			st.setInt(1, index);
			rs=st.executeQuery();
			while (rs.next()) {
				user.setId(rs.getInt(1));
				user.setName(rs.getString(2));
				break;
			}
			
		}finally{
			if (null!=rs) {
				rs.close();
			}
			
			if (null!=st) {
				st.close();
			}
		}
		
		return user;
		

	}
	
	public List<User> queryAll(Connection con) throws SQLException,IOException {
		List<User> list=new ArrayList<>();
		String sql="select * from user";
		try {
			st=con.prepareStatement(sql);
			rs=st.executeQuery();
			while (rs.next()) {
				User user=new User();
				user.setId(rs.getInt(1));
				user.setName(rs.getString(2));
				list.add(user);
			}
			
		}finally{
			if (null!=rs) {
				rs.close();
			}
			
			if (null!=st) {
				st.close();
			}
		}
		
		return list;
		

	}
	
}

2、JDBC接続のテストクラス
1)、TestJdbc.java:データベーステストクラス
package cn.java.jdbc;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;


public class TestJdbc {
	
	public static void main(String[] args) {
		Connection con=null;
		try {		
			con=(Connection) ConnectionFactory.getInstance().getConnection();
			UserDao userDao=new UserDao();
			//con=(Connection) ConnectionFactory2.getInstance().getConnection();
			if (null!=con) {
				System.out.println("Link JDBC SUCESS");
				//userDao.insert(con, "zhangsir");
				//userDao.delete(con, 4);
				//userDao.update(con, 1, "david");
				List<User> list=userDao.queryAll(con);
				for (User user : list) {
					System.out.println("id="+user.getId()+" name="+user.getName());
				}
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
	    } catch (IOException e) {
		e.printStackTrace();
	    }finally{
			if (null!=con) {
				try {
					con.close();
				} catch (SQLException e) {
				}
			}
		}
		
	}

}

三、JDBC接続まとめ
JDBC操作の基本手順は次のとおりです.
1、Connectionオブジェクトを作成し、SQLクエリーコマンド文字列を入力する.
2、PreparedStatementオブジェクトの取得:ConnectionオブジェクトからSQLクエリーコマンドを入力して取得する;
3、ResultSetの取得:PreparedStatementに対してexecuteUpdate()またはexecuteQurey()の取得を実行する.
4、開いているオブジェクトを順次閉じる:ResultSet、PreparedStatement、Connectionオブジェクトを前後して閉じる.