首页 > 数据库 >老杜 JavaWeb 讲解(四) ——Servlet编写JDBC连接数据库

老杜 JavaWeb 讲解(四) ——Servlet编写JDBC连接数据库

时间:2023-04-21 19:23:12浏览次数:74  
标签:JDBC JavaWeb rs 数据库 jdbc import Servlet String

老杜 JavaWeb 讲解

对应视频:

08-servlet中编写jdbc程序连接数据库

(六) 在Servlet(Java小程序)中编写JDBC连接数据库

6.1 JDBC介绍:

JDBC的全称是Java数据库连接 (Java Database connect),它是一套用于执行SQL语句的Java API。[1] JDBC(Java Data Base Connectivity)是Java编程语言中用来规范客户端程序如何进行访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

JDBC主要由两部分组成,一是JDBC API,这是使用Java语言访问数据库的标准,提供了使用Java语言访问不同数据库的标准接口,可以编写与平台和数据库无关的代码;二是JDBC驱动,它是一组实现JDBC API的类库,它负责完成Java程序与真实数据库之间的连接,通过实现JDBC API中的接口来达到这个目的。

通过 JDBC API,应用程序可以使用与平台和数据库无关的 SQL 语句和数据类型来访问数据库,并执行查询、更新、插入和删除等操作。[2] JDBC API 提供了以下核心类和接口:DriverManager 类、Connection 接口、Statement 接口、PreparedStatement 接口、CallableStatement 接口、ResultSet 接口等。

在使用 JDBC 连接数据库时,需要完成以下步骤:

  1. 加载数据库驱动程序。
  2. 获取连接对象。
  3. 创建 Statement 对象。
  4. 执行 SQL 语句。
  5. 处理结果集。
  6. 关闭对象。

为了防止 SQL 注入攻击,提高程序的性能,还可以使用 PreparedStatement 预编译 SQL 语句。同时,还可以使用连接池技术,避免频繁地创建和销毁数据库连接,从而提高程序的性能。[1] [2]

样例代码:

import java.sql.*;

public class Main {
    public static void main(String[] args) {
        try {
            // 加载数据库驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 获取连接对象
            String url = "jdbc:mysql://localhost:3306/ZWM";
            String user = "root";
            String password = "root";
            Connection conn = DriverManager.getConnection(url, user, password);

            // 创建 Statement 对象
            Statement stmt = conn.createStatement();

            // 执行 SQL 语句
            String sql = "SELECT no, name FROM t_student";
            ResultSet rs = stmt.executeQuery(sql);

            // 处理结果集
            while (rs.next()) {
                String no = rs.getString("no");
                String name = rs.getString("name");
                System.out.println(no + "\t" + name);
            }

            // 关闭对象
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

知识点:

  • Class.forName("com.mysql.cj.jdbc.Driver");与 Class.forName("com.mysql.jdbc.Driver"); 的区别

    Class.forName("com.mysql.cj.jdbc.Driver")Class.forName("com.mysql.jdbc.Driver") 的主要区别在于 JDBC 驱动版本不同。

    com.mysql.cj.jdbc.Driver 是 MySQL Connector/J 5.1 的驱动类,而 com.mysql.jdbc.Driver 是早期版本的 MySQL Connector/J 的驱动类。

    MySQL Connector/J 5.1 和早期版本的 MySQL Connector/J 在 API 和实现上有一些不同之处。从功能、性能和稳定性等角度考虑,推荐使用新版的 MySQL Connector/J 5.1。

    在使用 MySQL Connector/J 建立连接时,需要注意以下几点:

    • 加载驱动类:在 Java 8 及以后版本中,可以省略掉 Class.forName() 方法,因为 JDBC 4.0 开始自动查找并加载 Driver 类;
    • 建立连接:通过 DriverManager.getConnection() 方法建立连接,并指定连接字符串、用户名和密码;
    • 使用连接对象执行 SQL 命令:通过 Connection 对象的 createStatement() 或 prepareStatement() 方法创建 Statement 或 PreparedStatement 对象,然后使用它们执行 SQL 命令;
    • 关闭资源:处理完数据库操作后,需要关闭 ResultSet、Statement 和 Connection 对象,避免资源泄露。

6.2 Servlet中连接数据库:

  • Servlet是Java程序,所以在Servlet中完全可以编写JDBC代码连接数据库。
  • 在一个webapp中去连接数据库,需要将驱动jar包放到WEB-INF/lib目录下。(com.mysql.cj.jdbc.Driver 这个类就在驱动jar包当中。)

步骤:

  1. 编写相关代码(StudentServlet.java):

    import jakarta.servlet.Servlet;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.ServletRequest;
    import jakarta.servlet.ServletResponse;
    import jakarta.servlet.ServletConfig;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.*;
    
    public class StudentServlet implements Servlet{
    	public void init(ServletConfig config) throws ServletException{
    		
    	}
    	
    	public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
    
    		//将获取的数据打印到页面上
    		response.setContentType("text/html");
    		PrintWriter out = response.getWriter();
    
    		
    		//编写JDBC代码,连接数据库,查询所有学生的信息。
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    
    		try {
    			//注册驱动
                Class.forName("com.mysql.cj.jdbc.Driver"); 
    			//获取连接
    			String url = "jdbc:mysql://localhost:3306/ZWM";
    			String user = "root";
    			String password = "root";
                conn = DriverManager.getConnection(url, user, password); 
    			//获取预编译的数据库操作对象
    			String sql = "SELECT * FROM t_student";
    			ps = conn.prepareStatement(sql);
    			//执行SQL
    			rs = ps.executeQuery();
    			//处理查询结果集
                while (rs.next()) {
                    String no   = rs.getString("no");
                    String name = rs.getString("name");
                    System.out.println("no: " + no + ", name: " + name);
    
    				out.print("no: " + no + ", name: " + name+"<br>");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
    			//释放资源
    			if(rs!=null){
    				try {
    					rs.close();
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    
    			if(ps!=null){
    				try {
    					ps.close();
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    
    			if(conn!=null){
    				try {
    					conn.close();
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
            }
    
    	}
    	
    	public void destroy(){
    		
    	}
    	
    	public String getServletInfo(){
    		return "";
    	}
    
    	public ServletConfig getServletConfig(){
    		return null;
    	}
    }
    
  2. 导入相关jar包:

    将驱动jar包放到WEB-INF/lib目录下

  3. 编译java文件,生成class文件,将class文件移动至项目下的WEB-INF文件夹下的classes文件夹中。

  4. 在web.xml文件中配置Servlet

    	<servlet>
    		<servlet-name>a2_JDBC</servlet-name>
    		<servlet-class>StudentServlet</servlet-class>
    	</servlet>
    	
    	<servlet-mapping>
    		<servlet-name>a2_JDBC</servlet-name>
    		<url-pattern>/student</url-pattern>
    	</servlet-mapping>
    
  5. 启动tomcat,访问 http://localhost:8080/crm/student 访问相关页面。




文理双修:

5.《菩萨蛮·书江西造口壁》宋朝·辛弃疾

郁孤台下清江水,中间多少行人泪。西北望长安,可怜无数山。

青山遮不住,毕竟东流去。江晚正愁余,山深闻鹧鸪。

译文:

郁孤台下这赣江的水,水中有多少行人的眼泪。我举头眺望西北的长安,可惜只看到无数青山。

但青山怎能把江水挡住?江水毕竟还会向东流去。夕阳西下我正满怀愁绪,听到深山里传来鹧鸪的鸣叫声。

标签:JDBC,JavaWeb,rs,数据库,jdbc,import,Servlet,String
From: https://www.cnblogs.com/LJY-YSWZ/p/17341480.html

相关文章

  • JDBC--API --ResultSet
        importjava.sql.*;publicclassjdbcdome_ResultSet{publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{Class.forName("com.mysql.jdbc.Driver");Stringurl="jdbc:mysql://127.0.......
  • shardingjdbc
    shardingjdbc:轻量级数据库中间层,实现分表分库HikariCP:当下比较火的数据库连接池qiniu-java-sdk:此SDK适用于Java7及以上版本。使用此SDK构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到......
  • JDBC--API--Statement
    importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;publicclassjdbcdemo_Statement{publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{Class.forName......
  • java EE开发之Servlet第十一课:反射基础三
    javaEE开发之Servlet第十一课:反射基础三1.使用反射机制形成通用sql语句1)构建insert语句publicstaticvoidsave(Objectobj){ //获取传递过来对象的Class类对象 Classc=obj.getClass(); //获取数据库连接 Connectionconn=getConn(); //准备执行SQL语句的对象(车......
  • JDBC初识
    jdbc连接DriverManager驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中后续的处理就可以对这个列表进行操作.注册驱动方式1.DriverManager.registerDriver();2.写代码实现Class.forName("com.mysql.jdbc.Driver");利用反射机制3.......
  • JDBC--API--Connection
       ......
  • JDBC--API--DriverManager(驱动管理类)
       ......
  • hive 使用JDBC访问 和启动远程端口
      0:hiveservice开启远程访问端口: hive使用jdbc进行访问,要求我们必须开启远程可以访问的端口,其中端口11000是随机的,可以是10002或者别的端口,这设定好好java代码链接时候就要使用开启好的端口。  linuxshell下执行hive--servicehiveserver-p11000>/dev/null2>&1......
  • jdbc insert数据后获取ID
    有时insert数据,数据ID为自动生成,需要获取ID。 以下就是获取ID的方法:publicstaticStringinsertByID(Stringsql,IDataBaseBeanbean,ArrayList<Object>keyvalueList,ArrayList<Class<?>>classtypeList,SingleDataSourcedatasource)throwsSQLException{ Connectionconn=......
  • jdbc 报错 - 索引中丢失 IN 或 OUT 参数:
    jdbc报错-索引中丢失 IN或OUT参数:通常产生这种异常,是因为语句参数类型不一致所导致,如preparedStatement中的参数本应该是int/integer类型,但是设置参数是setString(1,String.valueof(xxx));或是现在流行的hibernate和ibatis的参数类型配置有问题,Integer配置为varchar2了。......