JDBC访问数据库包括两个方面:第一个是 java本身提供给程序员的API,大部分API位于java.sql包中,还有存在于javax.sql中。第二部分是:不同的数据库产品提供不同的JDBC API称为spi 也就是数据库驱动程序。数据库驱动中有一个关键类是帮助连接java程序与数据库创建连接的,驱动类(Driver Class)
利用JDBC操作数据库首先要下载不同数据库的驱动同时导入项目中。还要尽量熟悉java提供的API。首先介绍常用的api
(1)DriverManager:驱动管理类:
操作数据库首先建立链接,得到连接对象(Connection)着各类中定义了得到链接的方法:
public static Connection getConnection(String url,String user,String password)
getConnection方法获得数据库连接对象 ,url称为连接串,它体现了数据库的链接协议,数据库名称,端口,主机地址,user为数据库名,password为数据库密码。
(2)Connection 连接接口
可以通过他来获得语句执行对象(Statement)利用其中的createStatement()方法。
(3)Statement语句接口 包括executeUpdate、executeQuery方法。
其中 int executeUpdate(String sql ):执行增加、删除、修改操作。返回值是影响的行数。
ResultSet executeQuer(String sql ):执行查询操作,返回结果集对象。
(4)ResultSet结果集接口
当执行了查询操作后都会返回结果进行处理,结果都存进封装在这个对象中,该接口还提供了遍历结果集的方法
boolean next():该方法可以是结果集游标上下移动,if()/ while()实现。有记录返回true 没有false。
getXXX(String columnName)方法,如getString ,getInt XXX为数据类型。选择与字段相同的数据类型,通过名称可以返回对象的值
getXXX(Int indext)根据字段在结果集中的位置来返回字段的值 用法和上面的相似
链接数据库时首先声明驱动类的名字,连接串,连接对象,语句对象,可以使用class类中的forName()方法来加载一个类。
利用JDBC链接数据库 并且封装增删改查的方法。代码如下(masql为例):
package com.tjetc.dbutil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBConn {
//三属性
private Connection conn; //连接
private Statement stmt; //执行对象,用于执行sql语句
private ResultSet rs; //结果集,用于保存查询的结果
//构造方法
public DBConn(){
try {
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动文件
String url="jdbc:mysql://localhost:3306/project";
this.conn=DriverManager.getConnection(url,"root","1");
stmt=conn.createStatement();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查询的方法
public ResultSet execQuery(String strSql){
try {
rs=stmt.executeQuery(strSql);
return rs;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
//执行增删改的方法
public int execOther(String strSql){
try {
int flag=stmt.executeUpdate(strSql);
return flag;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
}
//关闭
public void closeAll(){
try {
if(!rs.isClosed()){
rs.close();
}
if(!stmt.isClosed()){
stmt.close();
}
if(!conn.isClosed()){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}