一、servlet本质:java代码 所有的数据存储在数据库。
怎么链接数据库,有一套行为规范叫jdbc。确定了到底怎么链接的。
有几套常用的数据库
如果没有行为规范,要编写一套链接程序。每个都会给一套链接程序,不利于计算机的更新替代,比如先用sqlServer,然后想换Oeacle,那整个编程逻辑都要重新写一遍,改动量太大。
Oeacle 全套产品,一个java应用程序,一个Oeacle,还有mysql.
一个java应用程序一开始属于Sum公司 , 想到了jdbc:行为规范(相当于双方达成有效的一个协议) ,规范了我们用户,编程程序员的一个使用(面向应用
给自己的驱动程序写一套驱动包,做一个链接使用的一个过程,每个厂商都写一个驱动包。 驱动包是由应用厂商实现的。
面向应用行为规范(jdbc),不需要做一个大型改动,只需要调整行为的参数,比如现在做一个更改,从sqlServer变成Oracle,只需要在行为规范把驱动包的加载稍微改变一下,密码甚至不用变,对于程序员来说只需要关心行为规范里怎么去写,而不用去关心驱动包怎么去写,如果没有驱动包、行为规范,意味着各写各的逻辑,逻辑也要修改。
解题流程:套路——即行为规范
解题流程:套路 -----jdc
管理驱动
面向应用行为规范定义了这四个类:操作这几个类
- DriverManager:驱动管理 注册jdc
- Connection :链接类 简历数据库的链接
- Statement : SQL编译器 向数据库发送并执行sql语句
- ResultSet: 查询结果集 处理返回的结果
链接哪个数据库就导入哪个驱动包,下一步执行DriverManager,加载并注册JDBC,注册完成之后,创建Connection对象,主要目的做链接,下一步创建
Statment对象 ,执行SQL语句(本身在Statment对象里面完成),如果是使用的查询的话,就需要使用使用ResultSet接收,不是查询,是增删改是没有返回数据的,直接下一步关闭链接。
开始----> 导入驱动包------> 加载并注册JDBC ------> 创建Connection ----->创建Statement对象 ------->执行SQL ——> (查询)使用ResultSet接收...
创建对象本质上就是创建一个内存空间,那内存空间怎么回收?
如果使用java自定义的回收机制,那对象回收本质上比较慢,如果我们不关闭Statement对象(就意味着没有清空这个Statment对象),再次查询的时候,又创建一个Statement对象,没有关闭就意味着可能会创建很多个对象,那内存迟早支撑不住。
ResultSet怎么处理,主要是做查询,做完之后 外:(处理查询结果)
下一步关闭Connection对象然后结束。
这些对象在完成自己工作之后,将不会再被重新使用,所以需要把内存清空掉。
先导入驱动。
首先第一步找到src,建一个包,建一个class——JDBC.java
做一个查询,写一个search方法,封装逻辑,用反射(用来加载jar包,也是DriverManager的体现)实现,抛出异常,选择try/catch.解决异常。
然后创建Connection对象,通过getConnection来返回,jdbc协议
创建Statement对象
执行sql语句
然后ResultSet接受
调用close
打开Navicat,新建数据库,设置好点击确定
然后新建表:
然后点击保存,表名叫student
然后创建好
每个主机:
url:统一资源定位符
本地IP地址:localhost
端口号:3306 通过端口号发送
项目名称:数据库名
后面包含的是字符集。
数据库用户名 跟密码
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Connection;
public class Jdbc {
public static void search() {
search();
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建connection对象 链接数据库
//url:统一资源定位符 :http://www.baidu.com/
Connection connection = (Connection) DriverManager.getConnection("jdbc:maysql://localhost:3306/weiyang?useUnicode=true&characterEncoding=utf-8","root","2020");
Statement statement = (Statement) connection.createStatement();
//sql语句
String sql = "select * from student";
ResultSet re = statement.executeQuery(sql);
//处理数据
while(re.next()) {
String idString = re.getString("id");
String name = re.getString("name");
String height = re.getString("height");
String age = re.getString("age");
System.out.println(idString + " " + name + " " + height + " " + age);
}
if (re != null) {
re.close();
}
if (connection != null) {
statement.close();
}
if (connection !=null) {
connection.close();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.sql;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Connection;
public class Jdbc {
static final String URL = "jdbc:mysql://localhost:3306/weiyang?useUnicode=true&characterEncoding=utf-8";
static final String ROOT = "root";
static final String PASSWORD = "2020";
public static void main(String[] args){
// insert();
// update();
delete();
}
public static void search() {
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//创建connection对象 链接数据库
//url:统一资源定位符 :
Connection connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/weiyang?useUnicode=true&characterEncoding=utf-8","root","2020");
Statement statement = (Statement) connection.createStatement();
//sql语句
String sql = "select * from student";
ResultSet re = statement.executeQuery(sql);
//处理数据
while(re.next()) {
String idString = re.getString("id");
String name = re.getString("name");
String height = re.getString("height");
String age = re.getString("age");
System.out.println(idString + " " + name + " " + height + " " + age);
}
if (re != null) {
re.close();
}
if (connection != null) {
statement.close();
}
if (connection !=null) {
connection.close();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static int insert() {
int temp = 0;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = (Connection) DriverManager.getConnection(URL,ROOT,PASSWORD);
Statement statement = (Statement) connection.createStatement();
String sql = "insert into student(name,height,age) values ('小风',186,23)";
statement.executeUpdate(sql);
temp++;
if(statement != null) {
statement.close();
}
if(connection != null) {
connection.close();
}
}catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return temp;
}
public static int update() {
int temp = 0;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = (Connection) DriverManager.getConnection(URL,ROOT,PASSWORD);
Statement statement = (Statement) connection.createStatement();
String sql = "update student set name ='小黑',height=186,age = 18 where id = 1";
statement.executeUpdate(sql);
temp++;
if(statement != null) {
statement.close();
}
if(connection != null) {
connection.close();
}
}catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return temp;
}
public static int delete() {
int temp = 0;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = (Connection) DriverManager.getConnection(URL,ROOT,PASSWORD);
Statement statement = (Statement) connection.createStatement();
String sql = "delete from student where id = 3";
statement.executeUpdate(sql);
temp++;
if(statement != null) {
statement.close();
}
if(connection != null) {
connection.close();
}
}catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return temp;
}
}