JDBC连接数据库
1.加载JDBC驱动程序
1.在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM,这通过java.lang.Class类的静态方法forName(String className)实现;
2.加载成功后,会将Driver类的实例注册到DriverManager类中;
2.提供JDBC连接的URL
1.连接URL定义了 连接数据库时的 协议、子协议、数据源标示(端口)
书写形式:协议:子协议:端口;
协议:在JDBC中总是以jdbc开始
子协议:桥连接的驱动程序 或 数据库管理系统的名称
数据源标示(端口):标记找到数据库来源的地址 与 连接端口
3.创建数据库的连接
要连接数据库,需要向 java.sql.DriverManager 请求并获得 Connection 对象,该对象就代表数据库的连接
使用 DriverManager 的 getConnection(String url,String username,String password)方法传入指定的 欲连接的 数据库的路径、数据库的用户名、数据库密码 来获得
4.创建一个Statement
要执行SQL语句,必须获得 java.sql.Statement 实例,Statement实例分为3种:
1.执行静态SQL语句 :通常用 Statement 实例实现
2.执行动态SQL :通常使用 PreparedStatement 实例
3.执行存储过程 :通常使用 CallableStatement 实例
5.执行SQL语句
Statement 接口提供了三种执行SQL方法 : executeQuery、executeUpdate、execute
1. ResultSet executeQuery(String sqlString) : 执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2. int executeUpdate(String sqlString) : 执行 insert、update 或 delete 语句
3. execute(String sqlString) : 用于执行返回多个结果集、多个更新计数、或者二者组合的语句;
6.处理结果
两种情况:
1. 执行更新返回的是本次操作影响到的记录数;
2. 执行查询返回的结果是一个 ResultSet 对象;
ResultSet 包含 符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据
7.关闭JDBC
操作完成之后,要把所有使用的JDBC对象全部关掉,以释放JDBC资源,关闭顺序和声明顺序相反
1. 关闭结果集
2. 关闭声明
3. 关闭连接对象
1 // 数据库链接地址 2 private static final String DB_URL = "jdbc:oracle:thin:@192.168.1.249:1521:orcl"; 3 // 用户名 4 private static final String DB_USER = "sc1409"; 5 // 密码 6 private static final String DB_PWD = "sc1409"; 7 // 数据库驱动 8 private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver"; 9 10 /** 11 * 创建数据库的连接 12 * 传入指定的 欲连接的 数据库的路径、数据库的用户名、数据库密码 13 * */ 14 public Connection getCon() throws ClassNotFoundException, SQLException { 15 // 加载驱动 16 Class.forName(DB_DRIVER); 17 // 连接数据库 18 Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PWD); 19 return con; 20 } 21 22 /** 23 * 关闭JDBC 24 * 操作完成之后,要把所有使用的JDBC对象全部关掉,以释放JDBC资源,关闭顺序和声明顺序相反 25 * */ 26 public void closeAll(Connection con, Statement stmt, ResultSet rs) throws SQLException { 27 // 关闭结果集 28 if(rs != null) rs.close(); 29 // 关闭声明 30 if(stmt != null) stmt.close(); 31 // 关闭连接对象 32 if(con != null && !con.isClosed()) con.close(); 33 } 34
1. 普通方法
1 public int quaryUser(User user) throws Exception{ 2 int result = 0; 3 Connection con = null; 4 PreparedStatement stmt = null; 5 ResultSet rs = null; 6 try{ 7 String sql = "SELECT count(1) FROM ccc_view WHERE cname = ?"; 8 con = getCon(); 9 stmt = con.prepareStatement(sql); 10 stmt.setString(1,user.getName()); 11 rs = stmt.executeQuery(); 12 if(rs.next()){ 13 result = rs.getInt(1); 14 } 15 }catch(Exception e){ 16 e.printStackTrace(); 17 }finally{ 18 closeAll(con, stmt, rs); 19 } 20 return result; 21 }
2. 存储过程
public int addUser(User user) throws Exception{ int result = 0; Connection con = null; CallableStatement cs = null; ResultSet rs = null; try{ con = getCon(); cs = con.prepareCall("{call ccc_fff(?,?,?)}"); cs.setString(1,user.getName()); cs.setString(2,user.getPwd()); cs.registerOutParameter(3, Types.FLOAT); cs.execute(); result = cs.getInt(3); }catch(Exception e){ e.printStackTrace(); }finally{ closeAll(con, cs, rs); } return result; }
3. 方法函数
1 public int LoginUser(User user) throws Exception{ 2 int result = 0; 3 Connection con = null; 4 PreparedStatement stmt = null; 5 ResultSet rs = null; 6 String sql ="SELECT login_cccf (?,?) FROM dual "; 7 try{ 8 con = getCon(); 9 stmt = con.prepareStatement(sql); 10 stmt.setString(1, user.getName()); 11 stmt.setString(2, user.getPwd()); 12 rs = stmt.executeQuery(); 13 if(rs.next()){ 14 result = rs.getInt(1); 15 System.out.print(result); 16 } 17 }catch(Exception e){ 18 e.printStackTrace(); 19 }finally{ 20 closeAll(con, stmt, rs); 21 } 22 return result; 23 }