什么是jdbc?
看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API。
Jdbc有什么用?
数据库有多种,并且不同数据库操作时的方式和语句可能不太一样,当使用java 代码控制sql 调用时,不可能每一种数据库都弄一套 java 的代码,所以就声明了一个套操作数据库的接口,java程序员只需调用这一套接口即可,具体的接口实现由对应的数据库厂商实现,所以这里就又有了一个新的概念叫做数据库驱动,这个驱动就是不同数据库厂商实现 JDBC 接口的类的一个工具包,当时用jdbc操作数据库时,需要添加对应的数据库驱动包。
如何使用jdbc?
使用jdbc操作数据库有以下几步:
- 添加驱动
- 创建数据库连接
- 通过连接获取操作数据库的对象
- 发送执行sql语句
- 处理结果集
- 关闭jdbc对象
接下来详细的介绍一下
添加驱动并获取数据库连接。不同的数据库对应的驱动包不一样,添加驱动包(添加jar包)之后需要通过驱动去获取一个数据库连接,没什么好说的,直接上代码:
//声明一个配置文件jdbc.properties
#数据库驱动类
driver=com.mysql.jdbc.Driver
#连接数据库
jdbcUrl=jdbc:mysql://127.0.0.1:3306/fqx_webapp
#用户名
user=root
#密码
password=123456--------------------------------------------------------------//工具类(基本类)
public class DBUtil {/*** 获取配置文件信息* @return*/private static Properties getProperties() {InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties properties = new Properties();try {properties.load(inputStream);} catch (IOException e) {e.printStackTrace();}return properties;}/*** 获取数据库连接 java.sql.Connection的一个实例* @return*/public static Connection getConnection() {Connection connection = null;Properties properties = getProperties();String driver = properties.getProperty("driver");try {//加载数据库驱动Class.forName(driver);//使用驱动管理器获取数据库连接connection = DriverManager.getConnection(properties.getProperty("jdbcUrl"), properties);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return connection;}/*** 释放资源* @param resultSet* @param statement* @param connection*/public static void close(ResultSet resultSet , Statement statement , Connection connection) {try {if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (Exception e) {e.printStackTrace();}}}
使用java对象数据库进行简单的增、删、改、查操作,代码如下:
public class Test {public static void main(String[] args) {Test test = new Test();
// test.insert();
// test.delete();
// test.update();test.query();}//添加public void insert() {//获取数据库连接Connection connection = DBUtil.getConnection();//编写sql,需要传参数的地方使用 ? 来表示,叫做占位符String sql = "INSERT INTO USER (uname , password) VALUES (? , ?)";PreparedStatement prepareStatement = null;try {//通过数据库连接获取数据库操作对象prepareStatement = connection.prepareStatement(sql);//使用对应的值填充占位符,key是占位符的下标,下标在1开始prepareStatement.setObject(1, "zhangsan");prepareStatement.setObject(2, 18);//发送并sql,返回结果//增删改可以使用executeUpdate()方法,查询使用executeQuery()方法int update = prepareStatement.executeUpdate();System.out.println("是否添加成功:"+update);} catch (SQLException e) {e.printStackTrace();} finally {//关闭资源DBUtil.close(null, prepareStatement, connection);}}//删除public void delete() {Connection connection = DBUtil.getConnection();String sql = "DELETE FROM USER WHERE ID = ?";PreparedStatement prepareStatement = null;try {prepareStatement = connection.prepareStatement(sql);prepareStatement.setObject(1, 3);int update = prepareStatement.executeUpdate();System.out.println("是否删除成功:"+update);} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(null, prepareStatement, connection);}}//修改public void update() {Connection connection = DBUtil.getConnection();String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";PreparedStatement prepareStatement = null;try {prepareStatement = connection.prepareStatement(sql);prepareStatement.setObject(1, "wangwu");prepareStatement.setObject(2 , 2);int update = prepareStatement.executeUpdate();System.out.println("是否修改成功:"+update);} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(null, prepareStatement, connection);}}//查询public void query() {Connection connection = DBUtil.getConnection();String sql = "SELECT ID,UNAME,PASSWORD FROM USER";PreparedStatement prepareStatement = null;ResultSet resultSet = null;try {prepareStatement = connection.prepareStatement(sql);//获取到结果集resultSet = prepareStatement.executeQuery();List<Map<String, Object>> list = new ArrayList<>();//返回的相当于一张表,表中有一个指针,当调用resultSet.next()方法时,指针就往后移一次while(resultSet.next()){Map<String, Object> map = new HashMap<>(); //根据对应的字段名获取结果几种的值map.put("ID", resultSet.getObject("ID"));map.put("UNAME", resultSet.getObject("UNAME"));map.put("PASSWORD", resultSet.getObject("PASSWORD"));list.add(map);}System.out.println("查询出的信息:"+list);} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(resultSet, prepareStatement, connection);}}}