我是靠谱客的博主 高高飞机,最近开发中收集的这篇文章主要介绍JDBC的五步,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 简单五步

1、加载驱动程序
  Class.forName(DriverClass);
2、连接数据库
  Connection connect = DriverManager.getConnection(DataBase URL);
3、创建语句
  Statement statement = connect.createStatement();
4、执行语句
  ResultSet rs = statement.executeQuery(SQL语句);
5、处理ResultSet

2.JdbcUtil.java

package com.rimi.project.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.rowset.CachedRowSet;

import com.sun.rowset.CachedRowSetImpl;

public class JDBCUtil {
	// 访问数据库的用户名
	private static String userName = null;
	
	// 访问数据库的密码
	private static String password = null;
	
	// 使用jdbc的数据库驱动
	private static String driver = null;
	
	// 访问数据库的url格式
	// jdbc代表协议,mysql代表子协议 localhost代表本地ip地址 3306代表端口 j1806代表指定的数据库名
	// rewriteBatchedStatements 确定是否开启批处理
	private static String url = null;

	static {
		// 在静态代码块中读取properties文件
		// getClassLoader 定位类加载路径
		// getResourceAsStream 以字节流的方式读出指定的文件
		InputStream inputStream = JDBCUtil.class.getClassLoader().getResourceAsStream("datasource.properties");
		
		// 利用Properties 工具类将输入字节流进行解析
		Properties properties = new Properties();
		try {
			properties.load(inputStream);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		// 利用properties工具类取出配置文件信息
		// getProperty方法根据配置文件中的变量名来获取变量值
		
		driver = properties.getProperty("driver");
		url = properties.getProperty("url");
		userName = properties.getProperty("userName");
		password = properties.getProperty("password");
		
		try {
			inputStream.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		// 第一步,注册加载驱动
		// Class.forName 将指定路径下的类,加载进java虚拟机
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	// 第二步,获取默认的数据库名和用户名去建立数据库连接
	public static Connection getConnection() {
		return getConnection(url,userName,password);
	}
	
	// 使用指定的用户名和数据库名建立连接
	public static Connection getConnection(String url,String userName,String password) {
		Connection connection = null;
		try {
			connection = DriverManager.getConnection(url, userName, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}
	
	// 第三步,建立普通通道
	public static Statement createStatement(Connection connection) {
		Statement statement = null;
		try {
			statement = connection.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return statement;
	}
	
	// 第四步,采用指定的数据库连接去执行sql并返回结果
	public static boolean update(String sql,Connection connection) {
		
		Statement statement = createStatement(connection);
		int row = 0;
		try {
			row = statement.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(null, statement, connection);
		}
		
		if(row > 0) {
			return true;
		} else {
			return false;
		}
	}
	
	// 根据提供的sql,使用默认的数据库连接 执行sql并返回结果
	public static boolean update(String sql) {
		Connection connection = getConnection();
		return update(sql,connection);
	}
	
	// 使用指定的连接,执行查询操作
	public static ResultSet query(String sql,Connection connection) {
		
		// 建立普通通道
		Statement statement = createStatement(connection);
		
		ResultSet resultSet = null;
		CachedRowSet cachedRowSet = null;
		try {
			// 普通通道执行查询操作
			resultSet =	statement.executeQuery(sql);
			// 离线结果集合,允许将ResultSet数据拷贝到java虚拟机内存,即使连接中断,数据不会丢失
			cachedRowSet = new CachedRowSetImpl();
			// 拷贝数据到离线结果集合
			cachedRowSet.populate(resultSet);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(resultSet, statement, connection);
		}
		
		return cachedRowSet;
	}
	
	// 使用默认的连接执行查询操作
	public static ResultSet query(String sql) {
		Connection connection = getConnection();
		return query(sql,connection);
	}
	
	
	// 建立预编译通道
	public static PreparedStatement createPreparedStatement(Connection connection, String sql) {
		
		PreparedStatement preparedStatement = null;
		try {
			preparedStatement = connection.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return preparedStatement;
	}
	
	
	// 绑定参数
	public static void bundleParam(PreparedStatement preparedStatement, String[] params) {
		
		if(null != params) {
			for(int index = 0; index < params.length; index++) {
				// 数组元素下标从0开始,而绑定参数,第一个参数下标为1,需要加1
				try {
					preparedStatement.setString(index+1, params[index]);
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	
	// 根据指定的数据库连接,利用预编译通道执行sql
	
	public static boolean preUpdate(String sql, String[] params, Connection connection) {

		// 创建预编译通道
		PreparedStatement preparedStatement = createPreparedStatement(connection, sql);
		
		// 给预编译通道绑定参数
		bundleParam(preparedStatement, params);
		
		int row = 0;
		try {
			// 执行sql,返回受影响的行数
			row = preparedStatement.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(null, preparedStatement, connection);
		}
		
		if(row > 0) {
			return true; 
		} else {
			return false;
		}

	}
	
	// 使用默认的连接,执行预通道sql
	public static boolean preUpdate(String sql, String[] params) {
		
		// 获取默认连接
		Connection connection = getConnection();
		return preUpdate(sql, params, connection);
		
	}
	
	public static ResultSet preSelect(String sql,String[] params, Connection connection) {
		
		// 通过指定连接,建立sql预编译通道
		PreparedStatement preparedStatement = createPreparedStatement(connection, sql);
		
		// 绑定参数
		bundleParam(preparedStatement, params);
		
		ResultSet resultSet = null;
		CachedRowSet cachedRowSet = null;
		try {
			resultSet = preparedStatement.executeQuery();
			// 创建一个离线结果集
			cachedRowSet = new CachedRowSetImpl();
			// 拷贝数据到离线结果集 
			cachedRowSet.populate(resultSet);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			close(resultSet, preparedStatement, connection);
		}
		return cachedRowSet;
	}
	
	public static ResultSet preSelect(String sql,String[] params) {
		
		Connection connection = getConnection();
		return preSelect(sql,params,connection);
	}
	
	
	public static void close(ResultSet resultSet, Statement statement, Connection connection ) {
	// 第五步 释放资源
	//	try {
	//		if(null != resultSet) {
	//			resultSet.close();
	//		}
	//	} catch (SQLException e) {
	//		e.printStackTrace();
	//	} finally {
	//		try {
	//			if(null != preparedStatement) {
	//				preparedStatement.close();
	//			}
	//		} catch (SQLException e) {
	//			e.printStackTrace();
	//		} finally {
	//			try {
	//				if(null != connection) {
	//					connection.close();
	//				}
	//			} catch (SQLException e) {
	//				
	//				e.printStackTrace();
	//			}
	//		}
	//		
	//	}
	//	
		if(null != resultSet) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(null != statement) {
			try {
				statement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(null != connection) {
			try {
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

最后

以上就是高高飞机为你收集整理的JDBC的五步的全部内容,希望文章能够帮你解决JDBC的五步所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部