Java数据库编程JDBC

1、概述

JDBC(Java Database Connectivity)是Java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类库(位于java.sql和javax.sql包中)。

JDBC工作流程:
Java数据库编程JDBC_第1张图片

在JDBC的基本操作中,最常用的类和接口包括:
DriverManager、Connection、Statement、PreparedStatement、CallableStatement和ResultSet
使用这几个类,就可以完成大部分的数据库操作工作。

DriverManager类用于管理JDBC驱动的服务类,程序中主要使用该类获得Connection对象。

Connection接口代表数据库连接,每个Connection对象代表一个与数据库的物理连接会话。
要想访问数据库,就必须先获得数据库连接。

Statement接口代表SQL语句,Statement对象用于执行SQL语句,
它可以用于执行DML、DDL和DCL语句。当执行SQL查询时,返回查询到的结果集。

PreparedStatement接口是Statement的子接口,代表预编译的SQL语句。
使用PreparedStatement对象可以执行预编译的SQL语句,性能更好。

CallableStatement接口也是Statement的子接口,代表数据库中的存储过程。
使用CallableStatement对象可以执行数据库中的存储过程。

ResultSet接口代表返回的结果集。
ResultSet包含访问查询结果的方法,它可以通过列索引或者列名获得列数据。
使用Result对象可以操作查询返回的结果集。

这几个类或接口的关系:
在这里插入图片描述

2、JDBC编程步骤

*1.加载驱动		
 *2.获取连接 	Connection
 *3.得到语句执行对象 
 *
 *Statement 
 *	直接执行sql语句,可能会出现sql语句注入风险
 *
 *PreparedStatement
 *	使用预编译,避免了sql语句注入风险
 *
 *4.执行sql语句
 *下列是执行对象的几种主要用的方法
 *	executeUpdate 针对增删改 返回int类型 表示受影响的行数
 *	executeQuery 针对查询	返回结果集
 *	execute		对增删改 返回布尔值   对查询	返回结果集
 *	
 *5.得到结果集
 *ResultSet
 *	得到结果集  可通过next() 得知是否下一行有值
 *6.关闭连接
 *	需要关闭连接对象,执行语句对象,结果集对象

3、连接到mysql数据库并操作

mysql的URL格式 :jdbc:mysql://主机名:端口号/数据库名
如果需要处理编码数据库和java代码编码不一致导致的乱码问题
在url格式的后面加上     
?useUnicode=true&characterEncoding=UTF8
示例:连接本机3306端口的test数据库的url为
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8

除此之外

Oracle
jdbc:oracle:thin:@主机名:端口号:数据库名

SQL Server
jdbc:sqlserver://主机名:端口号;databaseName=数据库名

查询操作示例:

	/**
	 * 查询数据
	 */
	private static void queryTable() {
		// TODO Auto-generated method stub
		Connection con = null;
		PreparedStatement pst = null;
		ResultSet res = null;
		String sql = "select id,username,create_time,update_time from t_user";
		try {
			//加载驱动   
			Class.forName("com.mysql.jdbc.Driver");
			//建立连接
			String url = "jdbc:mysql://localhost:3307/jdbctest?useUnicode=true&characterEncoding=UTF8";
			String user = "root";
			String password = "123456";
			con = DriverManager.getConnection(url, user, password);
			//获取执行语句对象  执行sql语句
			pst = con.prepareStatement(sql);
			res  = pst.executeQuery();
			//返回结果集
			while(res.next()) {
				System.out.print(res.getInt("id") + "	");
				System.out.print(res.getString("username") + "	");
				System.out.print(res.getString("password")+ "	");
				//DateUtit.自己创建的工具类  getDateStr()将date数据转化为string
				System.out.print(DateUtit.getDateStr(res.getTimestamp("create_time"), DateUtit.FORMAT_ALL)+ "	");
				System.out.print(DateUtit.getDateStr(res.getTimestamp("update_time"), DateUtit.FORMAT_ALL)+ "	");
				System.out.println();
			}
					
		} catch (ClassNotFoundException  e) {
			// TODO Auto-generated catch block	
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//关闭连接
			if(null != res) {
				 try {
					res.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(null != pst) {
				try {
					pst.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(null != con) {
				try {
					con.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

你可能感兴趣的:(Java学习)