JDBC编程(主要针对其流程)

JDBC编程

注:在本篇博客中,使用的数据库是mysql!!!

一、JDBC编程六步

1、注册驱动

这步就是在告诉Java程序,即将要连接的为哪个品牌的数据库, 这里有两种方法

//就是使用一个了多态,

    try {
            Driver driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }

注意:第一种方法不如第二种方法使用,且第二种如果要提高代码复用率的话,可以将其放入static的静态代码块

2、获取链接

这一步是在表示JVM的进程和数据库进程之间的通道打开了,且在这一步中还要在java代码中定义关于一些数据库的信息,但是尽量不要直接写在java代码中,如下图:

JDBC编程(主要针对其流程)_第1张图片

所以,可以在src文件夹下,创建一个properties包,在里面放入关于数据库的信息:

url = com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost(本地地址):3306/d1(数据库名)
user=root
password=root

但是要调用的话,还是用使用以下代码:

ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");

Connection conn = DriverManager.getConnection(url,user,password);//获取链接

3、获取数据库操作对象

Demo:

Statement st = conn.createStatement();

4、执行sql语句

这里就是要和数据库相关联了,这里我使用的是mysql数据库

//这里有两种情况,使用DQL(select)语句和DML(update、insert、delete)语句是不一样的

//①DML语句
String sql = "update user set name = 'jack' where id = 1";
int count = st.executeUpdate(sql);//这个返回值影响数据库的记条数

//②DQL语句
String sql = "select * from user";
ResultSet resultset = new ResultSet();
resultset = st.executeQuery(sql);

5、处理查询结果集

对于这一步,只针对DQL语句才有查询结果集。

对于处理结果集,取数据采用getString()方法,这个方法不管你数据库中存入的数据的数据类型。

//比如这里有一个数据表user
/*
user
------------------------
id      name       password
------------------------
1       小明        123456
------------------------
2       小王        123564
*/

//再结合以上的步骤,假设我们只取出第一行的数据
//第一种方法(1表示第一列,以此类推):
String id = resultset.getString(1);//取出第一行
String name = resultset.getString(2);//取出第二行
String password = resultset.getString(3);//取出第三行
//第二种方法(使用列的名称):
String id = resultset.getString("id");//取出第一行
String name = resultset.getString("name");//取出第二行
String password = resultset.getString("password");//取出第三行

//如果想取出第二例,使用一个循环就可以去实现,接下来使用代码展示取出
while(resultset.next()){
    String id = resultset.getString("id");
	String name = resultset.getString("name");
	String password = resultset.getString("password");
    
    System.out.println(id+","+name+","+"password");
}

6、释放资源

这一步看似对全局不起作用,其实关闭资源是很重要的一步。关闭顺序:按先关闭ResultSet,然后关闭PreparedStatement,最后关闭Connection。注意:第三方的数据库连接池,使用的时候,获取到Connection之后,使用完成,调用的关闭方法(close()) ,并没有将Connection关闭,只是放回到连接池中,如果调用的这个方法,而没有手动关闭PreparedStatement、或者Statement等,则这个PreparedStatement并没有关闭,这样会使得开发的程序内存急速增长,java的内存回收机制可能跟不上速度,最终造成Out of memory Error。

而关闭资源的位置,最好是在finally语句中,这是最好的位置。

finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }

最后,这里写一个所有步骤都结合在一起的代码

Demo:

public class Test {
   //第一步
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    //第二步
        String url = "jdbc:mysql://127.0.0.1:3306/qf";
        String root = "root";
        String password = "root";

        //获取链接对象
        Connection connection = null;
        ResultSet resultSet = null;
        PreparedStatement preparedStatement = null;
        try {
            connection = DriverManager.getConnection(url, root, password);
            
            //第三步
            
            //获取sql预编译器
            preparedStatement = connection.prepareStatement("select * from user);
            
            
            //第四步
            //结果集
            resultSet = preparedStatement.executeQuery();
            
            //第五步, 这里就不展示处理查询结果集了,在上面也涉及到了
            

        } catch (SQLException e) {
            throw new RuntimeException(e);
            
			//第六步
        }finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
}

最后在这里祝愿大家,学业有成!!!

你可能感兴趣的:(My_Java,java,tomcat,servlet,idea)