第九章JDBC

  1. 什么是JDBC
    JDBC的全称是java数据库连接(JAVA Datebase Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数数据库中数据的查询、更新、新增、和删除的操作。

  2. JDBC常用的API
    1.Driver接口
    Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。需要注意的是,在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中(这里指MySQL驱动JAR包)。
    2.DriverManager类
    DriverManager类用于加载JDBC驱动并创建与数据库的连接。在DriverManager类中,定义两个比较重要的静态方法。
    3.Connection接口
    Connection接口代表Java程序和数据库的连接,只有获得该连接对象才能访问数据库,并操作数据表。
    4.Statement接口
    Statement接口用于执行静态的SQL语句并返回一个结果对象,该接口的对象通过Connection实例的createStatement()方法获得。
    5.PreparedStatement接口
    PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。
    6.ResultSet接口
    ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。

实现第一个JDBC程序
(1)加载并注册数据库驱动
(2)通过DriverManager获取数据库连接
(3)通过Connection对象获取Statement对象
(4)使用Statement执行SQL语句
(5)操作ResultSet结果集
(6)关闭连接,释放资源

1.搭建数据库环境

CREATE DATABASE jdbc;
	USE jdbc;
	CREATE TABLE users(
	id INT PRIMARY KEYAUTO_INCREMENT,
	name VARCHAR(40),
	password VARCHAR(40)
	emai1 VARCHAR(60),
	birthday DATE
	)CHARACTER SET utf8 COLLATE utf8_general_ci;
	数据库和表创建成功后,再向 users表中插入3条数据,插入的SQL语句如下所示
	INSERT INTO users (NAME,PASSWORD,email,birthday)
	VALUES('zs','123456','zs(sina .com','1980-12-04');
	INSERT INTO users(NAME,PASSWORD,email,birthday)
	VALUES('lisi','123456','list@sina.com','1981-12-04');
	INSERT INTO users(NAME,PASSWORD,email,birthday)
	VALUES('wangwu','123456','wangwu@sina.com','1979-12-04');


2.创建项目环境,导入数据库驱动
在Eclipse中新建一个名称为chapter09 的Web项目,将下载好的MySQL 的数据库驱动文件mysql-connector-java-5.0.8-bin.ar复制到项目的lib目录中,并发布到类路径下(MySQL驱动文件可以在其官网地址:http:/ldev.mysal.com/downloads/connectorl/页面中下载,在浏览器中输入该地址后即可进入下载页面,单击页面Generally Available (GA) Releases窗口中的Looking for previous GA versions超链接后,在显示出的下拉框中下载所需的驱动版本即可)。

3.编写JDBC程序

package chapter11;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql. Date;
public class as {
    public static void main(String[] aras) throws SQLException {
    Statement stmt= null;
    ResultSet rs =null;
    Connection conn = null;
   try {
         Class.forName ( "com.tmysal.jdbc. Driver");//2.通过Drive rManager获取数据库连接
         String url="jdbc:mysal://localhost:3306/jdbc";
         String username = "root";
         String password ="itcast ";
         conn = DriverManager.getConnection (url,username,password);
//3.通过connection对象获取Statement对象stmt =conn.createstatement ();
//4.使用Statement执行sQL语句。
         stmt = conn.createStatement();
         String sql = "select* from users";
         rs = stmt.executeQuery(sql);
         System.out.println("id | name | password | email | birthday");
         while (rs.next()) {
         int id= rs.getInt ("id");//通过列名获取指定字段的值
         String name = rs.getString( "name");
         String pSw= rs.getString ("password");
         String email =rs.getString ("emai1");
         Date birthday = rs.getDate ("birthday");
         System.out.println(id + " | " + name + " | " + pSw + " | " + email + " | " + birthday);
         }
   }
        catch (ClassNotFoundException e){
         e.printStackTrace();
        }
    finally {
    	if(rs!=null) {
    	try {
    		rs.close();
    	}catch (SQLException e) {
    		e.printStackTrace();
    	}
    	rs = null;
    	}
    	if(stmt!=null) {
    		try {
    			stmt.close();
    			
    		}catch (SQLException e) {
    			e.printStackTrace();
    		}
    		stmt = null;
    		
    	}
    	if(conn!=null) {
    		try {
    			conn.close();
    		}catch (SQLException e) {
    			e.printStackTrace();
    		}
    		conn = null;
    	}
    	}
    }
}


注册驱动
释放资源

RreparedStatement对象
Statement提供了一个子类PreparedStatement.PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在PreparedStatement对象。当相同的SQL语句再次执行时,程序会使用PreparedStstement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样大大地提高了数据的访问效率。

package chapter11;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Connection;
public class as {
    public static void main(String[] aras) throws SQLException {    
    Connection conn = null;
    PreparedStatement preStmt = null;
   try {
         Class.forName ( "com.tmysal.jdbc. Driver");//2.通过Drive rManager获取数据库连接
         String url="jdbc:mysal://localhost:3306/jdbc";
         String username = "root";
         String password ="itcast ";
         conn = DriverManager.getConnection (url,username,password);
         String sql = "ISERT INTO users(name,password,email,birthday)" + "VALUES(?,?,?,?)";
         preStmt = conn.prepareStatement(sql);
         preStmt.setNString(1,  "zl");
         preStmt.setNString(2,  "123456");
         preStmt.setNString(3,  "zl@sina.com");
         preStmt.setNString(4,  "1789-12-23");
         preStmt.executeUpdate();        
   }catch (ClassNotFoundException e){    	   
         e.printStackTrace();
        }
    finally {
    	if (preStmt !=null) {
    	try {
    		preStmt.close();
    	}catch (SQLException e) {
    		e.printStackTrace();
    	}
   preStmt = null;
    	}
    	if(conn != null) {
    		try {
    			conn.close();
    			
    		}catch (SQLException e) {
    			e.printStackTrace();
    		}
    		conn = null; 		
    	}
    	}
    }
}


ResultSet对象
首先获取Connection对象连接数据库,然后通过Connection对象创建Statement对象并设置所需要的两个常量,接下来执行SQL语句,将获取的数据信息存放在ResuleSet中,最后通过ResultSet对象的absolute()方法取出ResultSet中指定数据的信息并输出。

package chapter11;

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

public class Example03 {
    public static void main(String[] args) {
    	Connection conn = null;
    	Statement stmt = null;
    	try {
    		Class.forName("com.mysql.jdbc.Driver");
    		String url = "jdbc:mysql://localhost:3306/jdbc";
    		String username = "root";
    		String password = "itcast";
    		conn = DriverManager.getConnection(url, username, password);
    		String sql = "select * from users";
    		stmt =conn.createStatement(
    				ResultSet.TYPE_SCROLL_INSENSITIVE ,
    				ResultSet.TYPE_FORWARD_ONLY );
    	ResultSet rs = stmt.executeQuery(sql);
    	System.out.print("第2条数据的name值为:");
    	rs.absolute(2);
    	System.out.println(rs.getNString("name"));
    	System.out.print("第1条数据的name值为:");
    	rs.beforeFirst();
    	rs.next();
    	System.out.println(rs.getNString("name"));
    	System.out.print("第4条数据的name值为:");
    	rs.afterLast();
    	rs.previous();
    	System.out.println(rs.getNString("name"));
    	
    	}catch (Exception e) {
    		e.printStackTrace();
    	}finally 
    	{
    		if (stmt != null) {
    			try {
    				stmt.close();
    			}catch (SQLException e) {
    				e.printStackTrace();
    			}
    			stmt = null;
    			
    		}
    		if (conn != null) {
    			try {
    				conn.close();
    				
    			}catch (SQLException e) {
    				e.printStackTrace();
    			}
    			conn = null;
    		}
    	}
    }
}
片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值