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......