数据库之!!jdbc就是这么简单

一、JDBC

JAVA Database Connectivity java 数据库连接.

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

二、为什么会出现JDBC

SUN公司提供的一种数据库访问规则、规范, 由于数据库种类较多,并且java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。 我们的java程序只要使用sun公司提供的jdbc驱动即可。

三、数据库驱动

我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。

数据库之!!jdbc就是这么简单


四、常用接口

1.Driver接口

Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:

  • 装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
  • 装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

2.Connection接口

Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定义的数据库Connection连接上。

  • 连接MySql数据库:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");
  • 连接Oracle数据库:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");
  • 连接SqlServer数据库:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

常用方法:

  • createStatement():创建向数据库发送sql的statement对象。
  • prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
  • prepareCall(sql):创建执行存储过程的callableStatement对象。
  • setAutoCommit(boolean autoCommit):设置事务是否自动提交。
  • commit() :在链接上提交事务。
  • rollback() :在此链接上回滚事务。

3.Statement接口

用于执行静态SQL语句并返回它所生成结果的对象。

三种Statement类:

  • Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
  • PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。
  • CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。

常用Statement方法:

  • execute(String sql):运行语句,返回是否有结果集
  • executeQuery(String sql):运行select语句,返回ResultSet结果集。
  • executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
  • addBatch(String sql) :把多条sql语句放到一个批处理中。
  • executeBatch():向数据库发送一批sql语句执行。

4.ResultSet接口

ResultSet提供检索不同类型字段的方法,常用的有:

  • getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
  • getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
  • getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
  • getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
  • getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。

ResultSet还提供了对结果集进行滚动的方法:

  • next():移动到下一行
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。

使用后依次关闭对象及连接:ResultSet → Statement → Connection

五、使用JDBC的基本步骤

1. 注册驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());


2. 建立连接

//DriverManager.getConnection("jdbc:mysql://localhost/test?user=SIHAI&password=SIHAI");
//2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。
conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");

3. 创建statement

//3. 创建statement , 跟数据库打交道,一定需要这个对象
st = conn.createStatement();

4. 执行sql ,得到ResultSet

//4. 执行查询 , 得到结果集
String sql = "select * from t_stu";
rs = st.executeQuery(sql);

5. 遍历结果集

 //5. 遍历查询每一条记录
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id="+id + "===name="+name+"==age="+age);
}

6. 释放资源

 if (rs != null) {
try {
rs.close();

} catch (SQLException sqlEx) { } // ignore
rs = null;
}

六、JDBC 工具类构建

1. 资源释放工作的整合

/**
* 释放资源
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn , Statement st , ResultSet rs){
closeRs(rs);
closeSt(st);
closeConn(conn);
}
private static void closeRs(ResultSet rs){
try {
if(rs != null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
private static void closeSt(Statement st){
try {
if(st != null){
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
}
private static void closeConn(Connection conn){
try {

if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}

2. 驱动防二次注册

/**
* 获取连接对象
* @return
*/
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(driverClass);
//静态代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");
//2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。
conn = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

3. 使用properties配置文件

  • 在src底下声明一个文件 xxx.properties ,里面的内容吐下:
 driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/student
name=root
password=root
  • 在工具类里面,使用静态代码块,读取属性
static{
try {
//1. 创建一个属性配置对象
Properties properties = new Properties();
InputStream is = new FileInputStream("jdbc.properties"); //对应文件位于工程根目录
//使用类加载器,去读取src底下的资源文件。 后面在servlet //对应文件位于src目录底下
//InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
//导入输入流。
properties.load(is);
//读取属性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");
} catch (Exception e) {
e.printStackTrace();
}
}

源代码如下:

public class JDBCUtil {

static String driverClass = null;

static String url = null;

static String name = null;

static String password= null;

static{

try {

//1. 创建一个属性配置对象

Properties properties = new Properties();

InputStream is = new FileInputStream("jdbc.properties");

//使用类加载器,去读取src底下的资源文件。 后面在servlet

// InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");

//导入输入流。

properties.load(is);

//读取属性

driverClass = properties.getProperty("driverClass");

url = properties.getProperty("url");

name = properties.getProperty("name");

password = properties.getProperty("password");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获取连接对象

* @return

*/

public static Connection getConn(){

Connection conn = null;

try {

Class.forName(driverClass);

//静态代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());

//DriverManager.registerDriver(new com.mysql.jdbc.Driver());

//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");

//2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。

conn = DriverManager.getConnection(url, name, password);

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

/**

* 释放资源

* @param conn

* @param st

* @param rs

*/

public static void release(Connection conn , Statement st , ResultSet rs){

closeRs(rs);

closeSt(st);

closeConn(conn);

}

private static void closeRs(ResultSet rs){

try {

if(rs != null){

rs.close();

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

rs = null;

}

}

private static void closeSt(Statement st){

try {

if(st != null){

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

st = null;

}

}

private static void closeConn(Connection conn){

try {

if(conn != null){

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

conn = null;

}

}

}

你必须很努力,然后看起来才毫不费力!

关注我每天都有干货,看下期哦。


分享到:


相關文章: