300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > jdbc 4.0连接mysql_使用JDBC连接操作数据库

jdbc 4.0连接mysql_使用JDBC连接操作数据库

时间:2022-04-21 10:47:41

相关推荐

jdbc 4.0连接mysql_使用JDBC连接操作数据库

JDBC简介

Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成。

JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

使用JDBC编写的程序能够自动地将SQL语句传送给相应的数据库管理系统。

JDBC 是个"低级"接口,也就是说,它用于直接调用 SQL 命令。在这方面它的功能极佳,并比其它的数据库连接 API 易于使用,但它同时也被设计为一种基础接口,在它之上可以建立高级接口和工具。高级接口是"对用户友好的"接口,它使用的是一种更易理解和更为方便的 API,这种API在幕后被转换为诸如 JDBC 这样的低级接口。

JDBC扩展了Java的功能,由于Java语言本身的特点,使得JDBC具有简单、健壮、安全、可移植、获取方便等优势。

JDBC中常用类和接口

接口/类功能说明

DriverManager

数据库驱动管理类,用于加载和卸载各种驱动程序,并建立于数据库的连接

Connection

此接口用于连接数据库

Statement

此接口用于执行SQL语句并将数据检索到ResultSet中

ResultSet

结果集接口,提供检索SQL语句返回数据的各种方法

PreparedStatement

此接口用于执行预编译的SQL语句

CallableStatement

此接口用于执行SQL存储过程的语句

JDBC开发步骤

注册驱动

建立连接

创建statement

执行sql,得到ResultSet

查看结果

释放资源

开发第一个JDBC程序

源码

1 packagecom.jyroy.test;2

3 importjava.sql.DriverManager;4 importjava.sql.ResultSet;5 importjava.sql.SQLException;6 importjava.sql.Statement;7

8 importcom.jyroy.util.JDBCUtil;9

10 importjava.sql.Connection;11 importjava.sql.Driver;12

13 public classMainTest {14

15 public static voidmain(String[] args) {16 Connection connection = null;17 Statement st = null;18 ResultSet rs = null;19

20 try{21 //1.注册驱动

22 DriverManager.registerDriver(newcom.mysql.jdbc.Driver());23

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

26 connection = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "password");27

28 //方法二29 //DriverManager.getConnection("jdbc:msql://localhost/student?user=root&password=password");30

31 //3.创建statement,跟数据库打交道一定需要这个对象

32 st =connection.createStatement();33

34 //4.执行查询

35 String sql = "select * from stu";36 rs =st.executeQuery(sql);37

38 //5.遍历查询每一条记录

39 while(rs.next()) {40 int id = rs.getInt("id");41 String name = rs.getString("name");42 int age = rs.getInt("age");43

44 System.out.println("id = " + id + "; name = " + name + "; age = " +age);45 }46 //进行资源释放

47 connection.close();48 st.close();49 rs.close();50

51 } catch(SQLException e) {52 e.printStackTrace();53 }54 }55 }56

结果

使用工具类

借助工具类来方便JDBC的操作

获取数据库连接

建立数据库连接的类,里面封装好实现数据库连接的函数,方便调用实现数据库连接

这里说两个问题:

一:

这里多用了一个 Class.forName("com.mysql.jdbc.Driver"); 因为

在上面的例子中,Driver这个类里面有静态代码块(java.sql.DriverManager.registerDriver(new Driver())),我们在new的时候一开始就加载了Driver类,相当于注册了两次驱动,为了避免这个情况,使用Class.forName("com.mysql.jdbc.Driver");来进行驱动的注册。

二:

根据JDBC官方文档,在JDBC5之后,Class.forName(); 的注册驱动,官方已经帮我们实现了,我们不加载驱动(JDBC会自动识别使mysql还是oracl什么的,当然了,如果同时用了mysql和oracl就要写上了,这个时候就没法自动确定了),直接建立连接也是可以的,大家可以自己试一下把Class.forName();这句话注释掉,也是可以完美运行的!

1 packagecom.jyroy.DBUtil;2

3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.SQLException;6

7 public classDBUtil {8

9 private static Connection connection=null;10

11 static{12 try{13 //1.加载驱动程序

14 Class.forName("com.mysql.jdbc.Driver");15 //2.获得数据库的连接

16 connection = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "password");17

18 } catch(ClassNotFoundException e) {19 e.printStackTrace();20 } catch(SQLException e) {21 e.printStackTrace();22 }23 }24 //将获得的数据库与java的链接返回(返回的类型为Connection)

25 public staticConnection getConnection(){26 returnconnection;27 }28 }

我们在MainTest中调用

1 connection = DBUtil.getConnection();

运行之后,同样可以得到相同的查询结果

进行资源释放

上面的资源释放,只是简单的close掉了,更好的办法释放资源还是在finally语句块中,因此重新编写代码,使用finally语句块,我这里直接写了一个工具类,让代码更清晰一点。

finally一般拿来做一些善后清理工作,当try块里出现错误的话,会立即跳出try块,找到匹配的错误,执行catch块里的语句,此时,可能在try块里打开的文件没关闭,连接的网络没断开,对这些浪费的内存就不能及时释放回收,因此利用finally进行一些善后工作

1 packagecom.jyroy.util;2

3 importjava.sql.Connection;4 importjava.sql.ResultSet;5 importjava.sql.SQLException;6 importjava.sql.Statement;7

8 public classJDBCUtil {9 /*

10 释放资源11 */

12

13 public static voidrelease(Connection connection, Statement st, ResultSet rs) {14 closeConn(connection);15 closeRs(rs);16 closeSt(st);17 }18

19 private static voidcloseRs(ResultSet rs) {20 try{21 if(rs!=null) {22 rs.close();23 }24 } catch(SQLException e) {25 e.printStackTrace();26 }finally{27 rs = null;28 }29 }30

31 private static voidcloseSt(Statement st) {32 try{33 if(st!=null) {34 st.close();35 }36 } catch(SQLException e) {37 e.printStackTrace();38 }finally{39 st = null;40 }41 }42

43 private static voidcloseConn(Connection connection) {44 try{45 if(connection!=null) {46 connection.close();47 }48 } catch(SQLException e) {49 e.printStackTrace();50 }finally{51 connection = null;52 }53 }54

55 }

在MainTest类中进行使用

1 JDBCUtil.release(connection, st, rs);

数据库的增删查改

查询

1 packagecom.jyroy.test;2

3 importjava.sql.DriverManager;4 importjava.sql.ResultSet;5 importjava.sql.SQLException;6 importjava.sql.Statement;7

8 importcom.jyroy.DBUtil.DBUtil;9 importcom.jyroy.util.JDBCUtil;10

11 importjava.sql.Connection;12 importjava.sql.Driver;13

14 public classMainTest {15

16 public static voidmain(String[] args) {17

18 Connection conn = null;19 Statement st = null;20 ResultSet rs = null;21

22 try{23 //1.获取连接对象

24 conn =DBUtil.getConnection();25

26 //2.根据连接对象,得到statement

27 st =conn.createStatement();28

29 //3.执行查询

30 String sql = "select * from stu";31 rs =st.executeQuery(sql);32

33 //4.遍历输出结果

34 while(rs.next()) {35 String name = rs.getString("name");36 int age = rs.getInt("age");37

38 System.out.println(name + " " +age);39 }40

41 } catch(SQLException e) {42 //TODO 自动生成的 catch 块

43 e.printStackTrace();44 }finally{45 JDBCUtil.release(conn, st, rs);46 }47 }48 }

插入

1 @Test2 public voidtestInsert() {3 Connection conn = null;4 Statement st = null;5

6 try{7 //1.获取连接对象

8 conn =DBUtil.getConnection();9

10 //2.根据连接对象,得到statement

11 st =conn.createStatement();12

13 //3.执行插入

14 String sql = "insert into stu values(null, 'xiaoming', 12)";15

16 int result =st.executeUpdate(sql);17

18 //result表示影响的行数,大于0表示添加成功,否则失败

19 if(result > 0) {20 System.out.println("添加成功");21 }22 else{23 System.out.println("添加失败");24 }25

26 } catch(SQLException e) {27 //TODO 自动生成的 catch 块

28 e.printStackTrace();29 }finally{30 JDBCUtil.release(conn, st);31 }32 }

删除

1 @Test2 public voidtestDelete() {3 Connection conn = null;4 Statement st = null;5

6 try{7 //1.获取连接对象

8 conn =DBUtil.getConnection();9

10 //2.根据连接对象,得到statement

11 st =conn.createStatement();12

13 //3.执行删除

14 String sql = "delete from stu where name = 'xiaoming'";15

16 int result =st.executeUpdate(sql);17

18 //result表示影响的行数,大于0表示添加成功,否则失败

19 if(result > 0) {20 System.out.println("删除成功");21 }22 else{23 System.out.println("删除失败");24 }25

26 } catch(SQLException e) {27 //TODO 自动生成的 catch 块

28 e.printStackTrace();29 }finally{30 JDBCUtil.release(conn, st);31 }32 }

更新

1 @Test2 public voidtestUpdate() {3 Connection conn = null;4 Statement st = null;5

6 try{7 //1.获取连接对象

8 conn =DBUtil.getConnection();9

10 //2.根据连接对象,得到statement

11 st =conn.createStatement();12

13 //3.执行更新

14 String sql = "update stu set age = 11 where name = 'zhangsan'";15

16 int result =st.executeUpdate(sql);17

18 //result表示影响的行数,大于0表示添加成功,否则失败

19 if(result > 0) {20 System.out.println("更新成功");21 }22 else{23 System.out.println("更新失败");24 }25

26 } catch(SQLException e) {27 //TODO 自动生成的 catch 块

28 e.printStackTrace();29 }finally{30 JDBCUtil.release(conn, st);31 }32 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。