JDBC :是Java数据库连接技术的简称,提供连接各种常用数据库的能力
? JDBC的工作原理
? JDBCAPI
提供者:Sun公司
? 内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:
DriverManager类
Connection接口
Statement接口
ResultSet接口
? DriverManager
提供者:Sun公司
作用:管理各种不同的JDBC驱动
? JDBC驱动
提供者:数据库厂商
作用:负责连接各种不同的数据库
? JDBCAPI主要功能:
与数据库建立连接、执行SQL语句、处理结果
DriverManager:依据数据库的不同,管理JDBC驱动
Connection:负责连接数据库并担任传送数据的任务
Statement:由 Connection产生、负责执行SQL语句
ResultSet:负责保存Statement执行后所产生的查询结果
? JDBC编程模板
try { Class.forName(JDBC驱动类);//1、加载JDBC驱动 } … … try { Connection con=DriverManager.getConnection(URL,数据库用户名,密码);//2.与数据库建立连接 Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM table1;");//3.发送SQL语句,并得到返回结果 while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c");//4、处理返回结果 } rs.close(); stmt.close(); con.close();//5、释放资源
? JDBC驱动由数据库厂商提供
在个人开发与测试中,可以使用JDBC-ODBC桥连方式
? 1.使用JDBC-ODBC桥方式连接数据库
将对JDBCAPI的调用,转换为对另一组数据库连接API的调用
优点:可以访问所有ODBC可以访问的数据库
缺点:执行效率低、功能不够强大
如:
Connection conn = null; try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动 } catch (ClassNotFoundException e) { … … } try { conn = DriverManager.getConnection("jdbc:odbc:myDB", //建立连接 "root", "root" ); //省略代码 … … } catch (SQLException e) { //必须进行相关异常出处理 … … } finally { try { conn.close(); //关闭连接 } catch (SQLException e) { … … } }
2.在生产型开发中,推荐使用纯Java驱动方式
使用纯Java方式连接数据库
由JDBC驱动直接访问数据库
优点:完全Java代码,快速、跨平台
缺点:访问不同的数据库需要下载专用的JDBC驱动
示例:
Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver");//加载驱动 } catch (ClassNotFoundException e) { … … } try { conn = DriverManager.getConnection(//建立连接 "jdbc:mysql://localhost:3306/epet","epetadmin", "0000"); //省略代码 … … } catch (SQLException e) {//必须进行相关异常处理 … … } finally { try { conn.close();//关闭连接 } catch (SQLException e) { … … }}
? Statement常用方法
方法名 | 说 明 |
---|---|
ResultSet executeQuery(String sql) | 执行SQL查询并获取到ResultSet对象 |
int executeUpdate(String sql) | 可以执行插入、删除、更新等操作,返回值是执行该操作所影响的行数 |
boolean execute(String sql) | 可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet |
? 示例
1.使用Statement添加宠物 Connection conn = null; Statement stmt = null;//声明Statement变量 … … // 建立连接 … … stmt = conn.createStatement();//获取Statement对象 StringBuffer sbSql = new StringBuffer( "insert into dog (name,health,love,strain) values ( ‘"); sbSql.append(name + "‘,"); sbSql.append(health + ","); sbSql.append(love + ",‘"); sbSql.append(strain + "‘)"); stmt.execute(sbSql.toString());//执行SQL语句也可使用:stmt. executeUpdate(sbSql.toString()); … stmt.close();//执行SQL语句 conn.close();//关闭Statement对象 2.使用Statement更新宠物 Connection conn = null; Statement stmt = null;//声明Statement变量 … // 建立连接 … … // 更新狗狗信息到数据库 stmt = conn.createStatement();//获取Statement对象 String sql="update dog set health=80,love=15 where id=1"; int result=stmt.executeUpdate(sql);//执行SQL语句 … stmt.close();//关闭Statement对象 conn.close();
? ResultSet常用方法
方法名 | 说 明 |
---|---|
boolean next() | 将游标从当前位置向下移动一行 |
boolean previous() | 游标从当前位置向上移动一行 |
void close() | 关闭ResultSet 对象 |
int getInt(int colIndex) | 以int形式获取结果集当前行指定列号值 |
int getInt(String colLabel) | 以int形式获取结果集当前行指定列名值 |
float getFloat(int colIndex) | 以float形式获取结果集当前行指定列号值 |
float getFloat(String colLabel) | 以float形式获取结果集当前行指定列名值 |
String getString(int colIndex) | 以String 形式获取结果集当前行指定列号值 |
String getString(String colLabel) | 以String形式获取结果集当前行指定列名值 |
示例
Connectionconn =null; Statementstmt = null; ResultSetrs= null;//ResultSet存在一个光标,光标所指行为当前行 // 建立连接 … … stmt= conn.createStatement(); rs= stmt.executeQuery("select* from dog");//执行SQL语句进行查询, 结果赋给结果集变量rs … … //遍历结果集,可使用列号或列名标识列 while( rs.next()) { System.out.print( rs.getInt(1)+"\t"); System.out.print( rs.getString(2) +"\t"); System.out.print(rs.getInt("health")+"\t"); … … } … … //注意关闭顺序 rs.close(); stmt.close(); conn.close ();
? PreparedStatement接口
使用PreparedStatement接口
继承自 Statement接口
比Statement对象使用起来更加灵活,更有效率
示例
Connection conn = null;
PreparedStatement pstmt = null;//声明PreparedStatement变量
?
…
// 建立连接
… …
// 更新狗狗信息到数据库
String sql="update dog set health=?,love=? where id=?";//使用占位符的SQL语句
pstmt = conn.prepareStatement(sql);//创建PreparedStatement对象
//设置每个输入参数的值
pstmt.setInt(1, 80);
pstmt.setInt(2, 15);
pstmt.setInt(3, 1);
pstmt.executeUpdate();//执行SQL语句
… …
pstmt.close();
conn.close();
?
在idea里面创建工具包(配置文件):main----->new------>directory--->名字resourices(变色 make directory as +.......)--->在创建的resources下创建一个file ,名字为(xxx.properties)