Java Database Connectivity简称JDBC,是Java中访问数据库的一种技术。JDBC有两部分组成,JDBC API和JDBC Driver Interface。
JDBC的工作原理:
1、装载驱动程序(向DriverManager注册驱动程序)
2、通过驱动管理器获得数据库连接
3、得到能操作sql的接口:Statement或PreparedStatement
4、执行sql
5、处理返回的数据
6、事务的处理,提交或回滚
7、关闭数据库操作和连接
常见的API接口 | 描述 |
java.sql.Driver | 定义一个在每个数据库驱动程序中必须实现的驱动程序界面 |
java.sql.DriverManager | 用来管理数据库驱动 |
java.sql.Connection | 一个连接,表示与某一数据库的连接会话,可以处理SQL和返回结果 |
java.sql.Statement | 用作执行一条静态的sql语句并接收产生的结果 |
java.sql.PreparedStatement | 保存一个预编译的sql语句对象,该对象可被高效的执行多次 |
java.sql.ResultSet | 执行sql后产生的结果集。 |
java.sql.CallableStatement | 用于执行存储的sql过程的界面。 |
1、Connection
Connection对象代表与数据库的连接。连接过程包括执行sql语句和返回结果。一个应用程序可以与单个或多个数据库连接。
1、加载数据库驱动程序:Class.forName("com.mysql.cj.jdbc.Driver");
2、通过驱动管理器获得数据库连接:String url="jdbc:mysql://localhost:3306/data?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true";
3、调用DriverManager对象的getConnection(url,user,password)方法获取到Connection对象
2、Statement
通过Connection对象的createStatement()方法可以获取到一个Statement对象,这个对象是用来操作数据库的。实现动态查询时需要字符串拼接,无法防止sql注入。
如果是查询语句,就调用execteQuery(sql)方法。将sql语句传入Statement对象会返回一个ResultSet集,但这个集是临时的,随着Connection对象的关闭会消失,所以需要创建对应的List集用来接收结果。
如果是增删改语句,则调用executeUpdate(sql)方法。返回执行的行数。
Connection conn=Utils.getConn();//首先从工具类获得数据库连接
//查询案例
String sql="select * from table";//定义查询语句
Statement stmt=conn.createStatement();//获取stmt对象
ResultSet rs=stmt.executeQuery(sql);//返回结果集
//删除案例
String sql="delete from table";//定义删除sql语句
int i=stmt.executeUpdate(sql);//返回执行的行数
3、PrepareStatement
PrepareStatment是一个支持占位符的操作数据库对象,用法与Statement有所不同。Statement对象可以先创建对象再将sql语句传递给执行的增删改查方法。PrepareStatement对象需要将预编译好的SQL语句传入,通过调用setString(index,value)方法,将需要输入的值赋给对应的位置,再调用对应的executeQuery方法或者executeUpdate方法进行增删改查。更易于维护和阅读,且有效防止sql注入。
Connection conn=Utils.getConn();//根据工具类获取数据库连接
//多行插入
String sql="insert into table(name,id) values(?,?)";//定义预编译的sql语句
preparedStatement pstmt=conn.prepareStatement(sql);//将预编译语句赋给pstmt对象
pstmt.setString(1,"张三");//将占位符1的位置赋值为张三
pstmt.setInt(2,123);//将占位符2的位置赋值为123
pstmt.addBatch();
pstmt.setString(1,"李四");
pstmt.setInt(2,124);
pstmt.addBatch();
pstmt.executeBatch();//执行多行插入语句
3.1日期和时间
在java中存在多种不同的日期格式,有时候以Date的形式出现,有时候以String的形式出现。在与MySQL数据库交互数据的时候,需要保证传入的数据类型和接收的数据类型一致,如果不一致就需要进行类型转换。
在MySQL数据库中常见的日期类型有Date(年月日)和DateTime(年月日时分秒),数据库可以识别字符串类型的日期,也可以识别对应的java.sql包下的日期类型。我们日常在程序中使用的日期主要是java.util包下的,两者相似但又不相同。
java.sql.Timestamp数据库的日期类型(年月日时分秒)
java.sql.Date数据库的日期类型(年月日)
4、CallableStatement
CallableStatement接口是用来调用存储过程的方法。这个接口也支持占位符,可以通过对应的set方法赋值给存储过程的in参数,还可以通过registerOutParameter(index,Types)获取到执行完成后存储过程的out参数。通过调用execute方法来执行存储过程,返回boolean。