JDBC粗浅理解

JDBC概念:

JDBC简而言之就是java数据库连接。

JDBC访问数据库支持两层模型,也支持三层模型。

我使用的服务端是mysql,在使用JDBC操作数据库之前必须的做如下工作:

下载mysql-connector-java-5.1.39-bi.jar包,将其放到工程目录的lib文件下,添加buildpath即可。

JDBC只要掌握3个主要类基本上就算入门了(注意jdbc用到的类均应用java.sql包下)。

1.Connection

程序与数据库的连接类,是基于TCP协议的连接,连接需要三次握手花时相对较长,因此连接需要进行重用,且连接完毕需要关闭否则容易导致数据库连接次数用完。获得Connection对象的方法如下:

/**
		 * url指的是jdbc协议地址
		 * user 连接mysql的用户名
		 * password 密码
		 */
		Connection conn = DriverManager.getConnection(url, user, password);

2.Statement

执行SQL语句的类,代码如下:

//获取Statement对象
		Statement st = conn.createStatement();
		//该方法对应的是sql语句中的select
		st.executeQuery(sql); 
		//该语句对应的是sql语句中的insert,delete,update
		st.executeUpdate(sql);

3.ResultSet

结果集,这个是statement执行executeQuery()方法时才会返回的结果集。

下面就要敲代码来看看怎么连接mysql的了:

在这之前先要写入连接数据库的配置信息db.properties,包含url,user,password

放在src目录下,结构如下

db.properties里面代码如下


根据Connection要求,我们需要对连接类进行重用,所以我把连接的操作封装到一个工具类中DBUtil,利用饿汉式单例,代码如下:


import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 恶汉单例,重用conn
 * 
 */
public class DBUtil {

	private static Connection conn;
	/**
	 * 获取Connection实例的方法
	 * @return
	 */
	public static Connection getConnection() {
		if (conn == null) {
			Properties p = getProperties();
			try {
				conn = DriverManager.getConnection(p.getProperty("url"),
						p.getProperty("user"), p.getProperty("password"));
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return conn;
	}
	/**
	 * 获取db文件属性类的方法
	 */
	private static Properties getProperties() {
		Properties p = new Properties();
		try {
			p.load(DBUtil.class.getClassLoader().getResourceAsStream(
					"db.properties"));
			return p;
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}
	/**
	 * 关闭资源
	 * @param rs
	 * @param st
	 * @param conn
	 */
	public static void close(ResultSet rs, Statement st, Connection conn){
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	

}
然后就是三大类读取操作数据库信息登场,我这里只实现了查询数据,代码如下

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

import com.csdn.bean.Dept;


public class ConnectionDemo {
	Connection conn = DBUtil.getConnection();

	public static void main(String[] args) {
		ConnectionDemo cd = new ConnectionDemo();
		Dept dept = cd.setectDept(10);
		System.out.println(dept);
	}
	/**
	 * 根据部门id
	 * 查询dept表中数据方法
	 */
	private Dept setectDept(int deptno) {
		Statement st = null;
		ResultSet rs = null;
		Dept dept = null;
		try {
			st = conn.createStatement();
			String sql = "select * from dept where deptno = '" + deptno + "'";
			rs = st.executeQuery(sql);
			if (rs.next()) {
				dept = new Dept();
				dept.setDeptno(rs.getInt("deptno"));
				dept.setDname(rs.getString("dname"));
				dept.setLoc(rs.getString("loc"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DBUtil.close(rs,st,conn);
		}
		return dept;
	}

}

to be continue......





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章