JDBC的简单入门程序

前面了解完MySql之后就可以动手做一个JDBC的入门小程序咯。那什么又是JDBC呢?他是干什么的呢?

JDBC全程 Java DataBase Connectivity,即Java数据库连接

SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC(由一些接口和类组成)。学习JDBC 技术目的,是使用Java技术操作数据库中数据记录。

JDBC的编程步骤如下:

                               

1.装载驱动

驱动是个什么?

两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信 。

那如何装驱动呢?

JDBC可以装载多种数据库多种驱动,这里装在MySql的驱动。步骤:

    1.官网下载驱动:https://dev.mysql.com/downloads/file/?id=480091

    2.将下载的驱动导入工程

                          

    3.在程序代码中装载注册驱动

		方法1.注册驱动
		DriverManager.deregisterDriver(new Driver());
		方法2.注册驱动
		Class.forName("com.mysql.jdbc.Driver");

        注册驱动用到的是DriverManager类,DriverManager是一个驱动管理的工具类,可以理解为一个容器(Vector),可以装很多种数据驱动

         它的registDriver方法分析
                          public static synchronized void registerDriver(java.sql.Driver driver)
                          参数:java.sql.Driver
                          我们传递的是  com.mysql.jdbc.Driver;

       但是在com.mysql.jdbc.Driver类中有一段静态代码块(静态代码块会优先于对象创建之前执行):

在com.mysql.jdbc.Driver类中有一段静态代码块:
static {
	ry {
		java.sql.DriverManager.registerDriver(new Driver());
		} catch (SQLException E) {
			throw new RuntimeException("Can't register driver!");
		}
	}

因此上述代码会有生成两个对象的问题,所以一般不使用方法1,转而使用反射的方法2.

2.获得连接对象

调用DriverManager类的getConnection方法

// 获取连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/study2", "root", "123");
原方法:Connection con = DriverManager.getConnection(url, user, password)

    url表示数据库的位置,格式为:

    主协议    子协议    主机    : 端口     数据库名字

    jdbc    :   mysql  :  //localhost:3306    /study2

    password表示数据库密码

    root表示数据库的用户

3.操作数据

1.statement的作用

    *    执行sql

         select:ResultSet executeQuery(String sql)

         insert:int executeUpdate(String sql)

    *   批量处理操作

        addBatch(String sql); 将sql语句添加到批处理
        executeBatch();批量执行
        clearBatch();清空批处理

2.ResultSet的作用

    *    用于封装select语句执行后查询的结果

        .next()方法用于判断是否有下一条记录。如果有,返回true并让游标向下移动一位(就是换个位置为了读取下一位),如果没有返回false

        public boolean next();

    *    通过ResultSet提供的getXxx()方法来获取当前游标指向的这条记录中的列数据

                        getInt()
                        getString()
                        getDate()
                        getDouble()
          参数有两种
                        1.getInt(int 列数);
                        2.getInt(String 字段名);

		// 通过连接对象获取操作sql语句Statemate的对象
		Statement st = con.createStatement();

		// 操作sql语句
		String sql = "select*from student";

		// 操作sql(select)语句,得到一个ResultSet结果集
		ResultSet rs = st.executeQuery(sql);

		// 遍历结果集
		while (rs.next()) {
			int id = rs.getInt("id");
			String name = rs.getString("username");
			String password = rs.getString("password");
			String email = rs.getString("email");
			
			System.out.println(id+"   "+name+"   "+password+"   "+email);
		}

4.资源的释放

依次倒序释放

		//资源释放,依次关闭,让资源迅速回收
		rs.close();
		st.close();
		con.close();

贴上完成代码吧

public class demo2 {

	public static void main(String[] args) {
		
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			
			//建立连接
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/study2", "root", "123");
			
			//创建操作sql语句的Statement对象
			st = con.createStatement();
			
			//创建sql语句
			String sql = "select*from student";
			
			//操作sql语句,返回一个结果集
			rs = st.executeQuery(sql);
			
			//遍历结果集,输出
			while (rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("username");
				String password = rs.getString("password");
				String email = rs.getString("email");
				
				System.out.println(id+"   "+name+"   "+password+"   "+email);
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				if(rs != null)
					rs.close();
				if(st != null)
					st.close();
				if(con != null)
					con.close();
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}			
		}
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_42621338/article/details/82786647