写点什么

Java 中的 JDBC 的使用方法有哪些?

作者:java易二三
  • 2023-07-26
    湖南
  • 本文字数:4268 字

    阅读完需:约 14 分钟

JDBC 其实一套规范(接口)

数据库厂商需要实现此接口(实现类)--数据库驱动

jdbc 的作用

可以和数据库创建链接

发送 sql 语句

接收返回值,处理结果

api 详解(java.sql 或者 javaX.sql)

DriverManager 类:

管理一组 JDBC 驱动程序的基本服务。

常用方法:  registerDriver(Driver):注册驱动

查看 mysql 的 Driver 的时候有下面一段代码: 


发现在类加载的时候已经注册过驱动,我们以后只需要把 Driver 加载到内存即可

类.Class

对象.getClass()

Class.forName("全限定名(包名+类名)")

以后开发中我们通过 Class.forName("com.mysql.jdbc.Driver")把驱动注册进去即可.

Connection 接口:

创建语句执行者:  Connection

conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456");

常用方法: 

Statement createStatement():创建 Statement -语句执行者

PreparedStatement prepareStatement(String sql) :创建一个预编译的语句执行对象

CallableStatement prepareCall(String sql) :(了解) 创建一个 CallableStatement 对象来调用数据库存储过程。  Statement 接口(容易产生 sql 注入, 后期使用 PreparedStatement. 后面会有 blog 说明这个问题)

sql 语句执行者:

Statement st=conn.createStatement();

常用方法:

ResultSet executeQuery(String sql) :执行查询语句,返回一个集合

int executeUpdate(String sql) :执行更新 插入 删除语句,返回影响行数.

boolean execute(sql):执行给定的 SQL 语句,该语句可能返回多个结果。

若返回 true ,执行是的查询语句

调用 getResultSet 获取查询结果

若返回 false,执行的是更新 插入 删除语句

调用 getUpdateCount 获取影响的行数

ResultSet 接口

返回的查询结果:

String sql = "...";

ResultSet rs=st.executeQuery(sql);

常用方法:

boolean next() :判断是否有下一条记录,并且移动到下一行

获取内容:getXXX(参数)

参数的写法:

1.字段名称 字符串

2.第几列 从 1 开始

getInt()

getString()

getObject() 

实例 JDBCUtil 类的书写

(1)配置文件 jdbc.properties

drivername=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/ddatabaseName

user=root

password=1234

(2)JDBCUtil.java

1 import java.sql.Connection;

2 import java.sql.DriverManager;

3 import java.sql.ResultSet;

4 import java.sql.SQLException;

5 import java.sql.Statement;

6 import java.util.ResourceBundle;

7

8 public class JDBCUtil {

9    //ctrl + shift + x  转成大写

10    //ctrl + shift + y  转成小写

11    static final String DRIVERNAME;

12    static final String URL;

13    static final String USERNAME;

14    static final String PASSWORD;

15   

16    static{

17       

18        /*通过 ResourceBundle 专门用来加载 properties 文件

19        ResourceBundle bundle=ResourceBundle.getBundle("文件名称");

20       

21        通过 bundle.getString(键的名字)

22        String value=bundle.getString("url");

23    */

24   

25        ResourceBundle bundle=ResourceBundle.getBundle("jdbc");

26        DRIVERNAME=bundle.getString("drivername");

27        URL=bundle.getString("url");

28        USERNAME=bundle.getString("user");

29        PASSWORD=bundle.getString("password");

30    }

31   

32    static{

33        try {

34            Class.forName(DRIVERNAME);

35        } catch (ClassNotFoundException e) {

36            e.printStackTrace();

37        }

38    }

39   

40    //获取链接

41    public static Connection getConnection() throws SQLException{

42        return DriverManager.getConnection(URL,USERNAME,PASSWORD);

43    }

44   

45    //释放资源

46    public static void closeResource(Connection conn,Statement st,ResultSet rs){

47        if (rs!=null) {

48            try {

49                rs.close();

50            } catch (SQLException e) {

51                e.printStackTrace();

52            }

53        }

54       

55        if (st!=null) {

56            try {

57                st.close();

58            } catch (SQLException e) {

59                e.printStackTrace();

60            }

61        }

62       

63        if (conn!=null) {

64            try {

65                conn.close();

66            } catch (SQLException e) {

67                e.printStackTrace();

68            }

69        }

70       

71    }

72 }

(3)CRUDDemo, 使用 PreparedStatement 方式

  1 public class PPCRUDDemo {

  2    public static void main(String[] args) {

  3        //插入

  4        //insert("赵四","123","zhaosi@163.com");

  5        //更新

  6        //updateByName("赵四","尼古拉斯.赵四");

  7        //获取

  8        //getByName("尼古拉斯.赵四");

  9        //删除

10        deleteByName("尼古拉斯.赵四");

11    }

12

13    private static void deleteByName(String string) {

14        //模版

15        Connection conn=null;

16        PreparedStatement st=null;

17        ResultSet rs=null;

18       

19        try {

20            //获取链接

21            conn=JDBCUtil.getConnection();

22            //编写 sql

23            String sql="delete from user where username =?";

24            //获取预编译执行者

25            st=conn.prepareStatement(sql);

26            //设置参数

27            st.setString(1, string);

28            //执行 sql

29            int i = st.executeUpdate();

30            //处理结果

31            if (i>0) {

32                System.out.println("成功");

33            }else{

34                System.out.println("失败");

35            }

36        } catch (Exception e) {

37            e.printStackTrace();

38        }finally{

39            //释放资源

40            JDBCUtil.closeResource(conn, st, rs);

41        }

42       

43    }

44

45    private static void getByName(String string) {

46

47        Connection conn=null;

48        PreparedStatement st=null;

49        ResultSet rs=null;

50       

51        try {

52            conn=JDBCUtil.getConnection();

53            String sql="select * from user where username=? limit 1";

54            st=conn.prepareStatement(sql);

55           

56            st.setString(1, string);

57            rs=st.executeQuery();

58            if (rs.next()) {

59                System.out.println(rs.getInt(1)+":"+rs.getString(2)+":"+rs.getObject(3)+":"+rs.getObject(4));

60            }

61        } catch (Exception e) {

62            // TODO: handle exception

63            e.printStackTrace();

64        }finally{

65           

66            JDBCUtil.closeResource(conn, st, rs);

67        }

68       

69    }

70

71    private static void updateByName(String oldName, String newName) {

72        Connection conn=null;

73        PreparedStatement st=null;

74        ResultSet rs=null;

75       

76        try {

77            conn=JDBCUtil.getConnection();

78            String sql="update user set username = ? where username = ?";

79            st=conn.prepareStatement(sql);

80            st.setString(1, newName);

81            st.setString(2, oldName);

82           

83            int i=st.executeUpdate();

84            //处理结果

85            if (i>0) {

86                System.out.println("成功");

87            }else{

88                System.out.println("失败");

89            }

90           

91        } catch (Exception e) {

92            e.printStackTrace();

93        }finally{

94            JDBCUtil.closeResource(conn, st, rs);

95        }

96       

97       

98    }

99

100    private static void insert(String username, String password, String email) {

101        Connection conn=null;

102        PreparedStatement st=null;

103        ResultSet rs=null;

104       

105        try {

106            //获取链接

107            conn=JDBCUtil.getConnection();

108            //编写 sql

109            String sql="insert into user values(null,?,?,?)";

110            //获取预编译语句执行者

111            st=conn.prepareStatement(sql);

112            //设置参数

113            st.setString(1, username);

114            st.setString(2, password);

115            st.setString(3, email);

116            //执行 sql

117            int i=st.executeUpdate();

118            //处理结果

119            if (i>0) {

120                System.out.println("成功");

121            }else{

122                System.out.println("失败");

123            }

124        } catch (Exception e) {

125            e.printStackTrace();

126        }finally{

127            JDBCUtil.closeResource(conn, st, rs);

128        }

129    }

130

131 }

这里没有多么高深的东西在,都要靠熟能生巧!

用户头像

java易二三

关注

还未添加个人签名 2021-11-23 加入

还未添加个人简介

评论

发布
暂无评论
Java中的JDBC的使用方法有哪些?_Java_java易二三_InfoQ写作社区