JDBC

JDBC

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)

JDBC

上一篇:登录mysql数据库


下一篇:高并发系统设计(六):如何减少频繁创建数据库连接的性能损耗?