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