数据库
存储数据:集中管理
目的: 文件中的数据能够放在数据库中集中管理
管理方法:一个项目一个库,每个库中包含最小化数据的表
开发: 节省存储空间,节省运行空间,采用数据库,架构
Java连接数据库
Java se所有类String ArrayList来自java.lang
后面web页面应用----à导包,包第三包 jar包
mysql-connector-java.jar 连接数据库的版本
java面向接口,提供了数据库的相关接口,每个不同的数据库厂家根据接口开发方法。Java使用数据库,调用对应接口的实现。
反射
连接:Connection 连接
在Driver类中connect方法就是数据库连接方法,方法返回类型Connection
Connection接口中方法就是操作数据库的相关方法
Java原生DriverManager,方便程序员开发方便
DriverManager调用Connection, getConnection
调用DriverManager.getConnection(数据库地址,用户名,密码 );
先把mysql-connect-java包导入到idea的库中
首先建一个包
在项目名称上右键,点击 open Module setting 模块设置。
在出现的对话框中,左侧点击library库,然后右边点击加号,添加这个jar包。
这时项目中的jar包就会解开。
使用代码连接java,再规范化开发(面向接口)
连接java效仿mysql源码,注册驱动。
DriverManager.registerDriver(new Driver());
获取Connection连接接口,因为数据库的操作方法都在这里。
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/shop","root","admin");
连接时输入mysql 数据库的连接地址。
getConnection输入数据库的连接地址
本地localhost,连接端口号 3306,连接数据库
jdbc:mysql://localhost:3306/shop
用户名 root
密码 admin
通过连接执行sql语句,需要定义sql语句。
String sql="select * from user";
在connection操作数据库前面有两个Statement , ResultSet
Statement 是执行sql语句的线程。
//Statement进行线程语句的处理
Statement st=conn.createStatement();
Statement是线程语句的处理,statement中可以执行语句
executeQuery执行查询,返回的类型是ResultSet,这是数据库结果记录
executeUpdate执行更新(增删改)
统一方法;execute执行增删改查,返回值是布尔型,不能查询后返回记录的条件(除登录)
如果执行查询,结果返回ResultSet
//查询的方法executeQuery,结果是ResultSet
ResultSet rs=st.executeQuery(sql);
在Resultset中看到next()方法,一定用到Iterator迭代器,这个迭代器可以用next();ResultSet是一个迭代器
只能使用迭代器的方法来使用。返回类型:next()有没有,数据库中把指针移到当前数据。
ResultSet中next方法的原理。
在ResultSet类中都要get后面跟上类型。因为java 和mysql 都是强语言类型,数据必须指明类型。Java 获取字段类型一定要跟mysql里对应字段类型是一致的。
ResultSet rs=st.executeQuery(sql);
//因为ResultSet有next()判断数据是否有,如果有一直做,执行一次next(),记录在restulSet中
while(rs.next()){
//按照mysql的类型和java类型对应关系取数据
int id=rs.getInt("id");
String name=rs.getString("username");
String sex=rs.getString("sex");
String position=rs.getString("position");
int age=rs.getInt("age");
String password=rs.getString("password");
System.out.println(id+":"+name+":"+sex+":"+position+":"+age+":"+password);
}
在数据方法中,Connection中有方法close(),close()关闭。
这里的问题:
DriverManager.registerDriver(new Driver());
注册Driver时,new Driver中源码中静态块中也发生new Driver()
我们这里的代码执行两次,目的是注册驱动
在源码中,获取连接本身具备
Reflection.getCallerClass()
Reflection类是 反射
通过反射技术注册类
注意:java 只出规范,其他的应用按照规范去开发,java在每一个规范中都有反射去找到相关的类。
直接使用反射技术把驱动注册。
正确连接数据库使用方法
(1)注册驱动(反射)
Class.forName("com.mysql.jdbc.Driver");
(2)获取连接
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/shop","root","admin");
(3)定义sql语句
String sql="select * from user";
(4)获取Statement
Statement st=conn.createStatement();
(5)根据需要决定,如果查询executeQuer,如果更新executeUpdate
ResultSet rs=st.executeQuery(sql);
返回结果:如果是查询用ResultSet,如果是增删改,返回的是int
如果是ResultSet使用迭代器遍历next()方法
(6)根据mysql的数据类型与java 的数据类型的对应关系,使用对应的get方法,得出结果.
(7)最后依次关闭ResultSet,Statement,Connection。
rs.close();
st.close();
conn.close();
开发:基本的单表增删改查
这里的方法:增删改查
一个属性和一个值对应关系(Map,面向对象)
按照java思想理念,面向对象,没有方法是逻辑关系,它就是java bean)
(2) 面向对象,把数据库记录中的字段封装成一个类。
Java bean在开发中,就是对应的数据库的表