JDBC day01

什么是持久化(persistence):
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。
大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。 
JPA:JavaEE的规范,Java persistence api: Java的持久化API. Hibernate实现了该规范.(xml/注解)
--------------------------------------------------------------------
在Java中,数据库存取技术只能通过JDBC访问数据库:
JDBC访问数据库的形式主要有两种:
   1).直接使用JDBC的API去访问数据库服务器(MySQL/Oracle).
   2).间接地使用JDBC的API去访问数据库服务器.
      第三方O/R Mapping工具,如Hibernate, MyBatis等.(底层依然是JDBC)

      JDBC是java访问数据库的基石,其他技术都是对jdbc的封装.


JDBC(Java DataBase Connectivity):
    是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序.
    JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
    总结: JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层,由java编写的一组类和接口组成,接口的实现由各个数据库厂商来完成
--------------------------------------------------------------------------------
JDBC的版本(不重要):


  JDBC隶属于JavaSE的范畴,伴随着JavaSE的版本升级.
Java6开始:JDBC4.0: (了解),JDBC4.0有一个新特性-无需加载注册驱动.
Java7开始:JDBC4.1:
---------------------------------------------------------------
JDBC的API在哪里?
   ----->JDK的API中.
         java.sql包装的就是JDBC的API.
         各大数据库厂商就会对JDBC的API提供实现类.--->驱动包
   注意:在开发中(编写的Java代码),使用到的关于JDBC的类/接口全部引入的是java.sql包中的.
        千万不要引入com.mysql..Xxx类.
        面向接口编程:
                       JDBC的接口 变量 =  new  MySQL的实现();
                                                        new  Oracle的实现();

获取数据库的连接

package day01_connection;

import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectionDemo {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.2.254/", "root", "spgsolar1");
		Thread.sleep(3000);
	}

}
这里加载驱动:Class.forName("com.mysql.jdbc.Driver");  //加载驱动的同时源文件可以看出有个静态代码块执行了new的操作

java6开始无需加载驱动,其原理是在META-INF services中有个文件java.sql.Driver内容是com.mysql.jdbc.Driver

加载驱动后需要获得一个connection,于是乎用到了DriverManager.getConnection方法

现有的驱动包中包含了org.gjt.mm.mysql它是早期的加载驱动的,现在都是extends com.mysql.jdbc.Dirver了

创建表(DDL)和异常处理


package day01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Sta_Exception {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) {
		//test1();
		//test2();
		String sql = "CREATE TABLE `t_student` (`id` bigint(20) PRIMARY KEY AUTO_INCREMENT,`name` varchar(20),`age` int(11))";
		try (
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "sllsbsb");
			Statement st = conn.createStatement();
			){
			st.executeUpdate(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	//ddl语句的执行和异常处理 jdk1.6
	private static void test2() {
		String sql = "CREATE TABLE `t_student` (`id` bigint(20) PRIMARY KEY AUTO_INCREMENT,`name` varchar(20),`age` int(11))";
		Connection conn = null;
		Statement st = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "sllsbsb");
			st = conn.createStatement();
			st.executeUpdate(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(st!=null){
					st.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}finally{
				try {
					if(conn!=null){
						conn.close();
					}
				} catch (Exception e3) {
					e3.printStackTrace();
				}
			}
		}
	}
	
	//实现连接后执行ddl语句
	private static void test1() throws ClassNotFoundException, SQLException {
		String sql = "CREATE TABLE `t_student` (`id` bigint(20) PRIMARY KEY AUTO_INCREMENT,`name` varchar(20),`age` int(11))";
		//加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//创建连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "sllsbsb");
		//创建语句对象
		Statement stasql = conn.createStatement();
		//执行ddl语句
		stasql.executeUpdate(sql);
	}

}

JDBCDML操作

和前面的差不多,只是语句换了

package day01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DML_Demo {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		String sql1 = "INSERT INTO t_student (name,age) VALUES ('西门吹雪',32)";
		String sql2 = "UPDATE t_student SET name = '乔峰',age = 16 WHERE id = 1";
		String sql3 = "DELETE FROM t_student WHERE id=1";
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?characterEncoding=utf-8", "root", "sllsbsb");
		Statement st  = conn.createStatement();
		st.executeUpdate(sql3);
	}

}
查询的结果集分析

JDBC的DQL操作

package day01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DQL_test {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		//m1();
		//m2();
		String sql = "SELECT * FROM t_student";
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "sllsbsb");
		Statement st = conn.createStatement();
		ResultSet rs = st.executeQuery(sql);
		while(rs.next()){
			long id = rs.getLong("id");
			String name = rs.getString("name");
			long age = rs.getLong("age");
			System.out.println("id="+id+",name="+name+",age="+age);
		}
		
		
	}
	//获取id为2的 信息
	private static void m2() throws ClassNotFoundException, SQLException {
		String sql = "SELECT * FROM t_student WHERE id = 2";
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test","root","sllsbsb");
		Statement st = conn.createStatement();
		ResultSet rs = st.executeQuery(sql);
		if(rs.next()){
			Long id = rs.getLong("id");
			String name = rs.getString("name");
			long age = rs.getLong("age");
			System.out.println("id="+id+",name="+name+",age="+age);
		}
	}
	
	//查询单行数据
	private static void m1() throws ClassNotFoundException, SQLException {
		String sql = "SELECT COUNT(id) FROM t_student";
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "sllsbsb");
		Statement st = conn.createStatement();
		ResultSet rs = st.executeQuery(sql);
		if(rs.next()){
			long rows = rs.getLong("COUNT(id)");
			System.out.println(rows);
		}
		rs.close();
		st.close();
		conn.close();
	}

}


DAO思想






DAO设计完成后,发现代码又臭又硬,于是进行了代码的重构上.












JDBC常用的API



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值