赞
踩
数据库DataBase,简称DB。
按照一定的格式存储数据的一些文件的组合。
顾名思义,存储数据的仓库。实际上就是一些文件,文件中存储了具有特定格式的数据。
数据库管理系统DataBaseManagement,简称DBMS。
专门用来管理数据库中的数据。数据库管理系统可以对数据库中的数据进行增删改查。
常见的数据库管理系统:Mysql、Oracle、MS、SqlServer、DB2
SQL:结构化查询语言
程序员编写SQL语句,DBMS执行语句,最终完成数据库路中数据的增删改查。
即:DBMS --执行--> SQL语句 --操作--> 数据库DB
MySql具有默认端口号:3306
端口号port:任何一个软件(应用)都会有的。端口号是应用的唯一代表。
端口号和IP地址在一块。IP地址用来定位计算机,而端口号用来定位计算机上的某个服务。
在同一台计算机上,端口号不能重复,具有唯一性。
数据库中存储数据最基本的单位就是表。任何一张表都有行、列。行被称为数据、列被称为字段。
SQL语句的分类:
DQL:数据查询语言,对数据进行查询:select
DML:数据操作语言,对数据进行增删改:insert、delete、update
DDL:数据定义语言,对数据进行定义:create、drop、alter
TCL:事务控制语言,包括事务提交commit、事务回滚rollback
DCL:数据控制语言,包括授予权限grant、撤销权限revoke
MySQL服务监听3306端口,因此客户端应该去连接3306端口。
连接Mysql的指令:mysql -h 主机IP -P 端口 -u 用户名 -p密码
-p密码中间没有空格
如果不写-h、-P,默认会是主机的3306端口
实际工作中,大多不用3306端口号作为Mysql的端口号,因为很容易被攻击。
JDBC:为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。
Java程序使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统·,从而操作数据库。
JDBC原理示意:
Java程序如果想要操作不同的数据库,方法不统一,不利于整个程序的管理。
因此改进:规定一套接口规范,让不同的数据库厂商实现,Java程序中统一调用接口的方法
即:Mysql、Oracle、DB2、SQL Server等等DBMS实现接口【驱动程序jar文件】
Java程序中调用接口中的方法完成数据库的连接
利用JDBC完成对数据库的操作:
1.在项目下创建lib文件夹,将mysql.jar包拷贝到文件中,并add to project加入到项目中
2.注册驱动
- // 创建Driver对象
- Driver driver = new Driver();
3.得到连接
- String url = "jdbc:mysql://127.0.0.1:3306/db01";
- // jdbc:mysql:// :表示规定好协议,按照jdbc的方式连接到mysql数据库
- // 127.0.0.1 :主机,也可以是localhost,表示连接ip地址
- // 3306 :表示监听3306端口
- // db01 :表示连接到db01数据库
- // 将数据库的用户名、密码放在properties对象中
- Properties properties = new Properties();
- // 其中,“user”、“password”是规定好的,后面的value值根据实际填写即可。
- properties.setProperty("user", "root"); // 用户名
- properties.setProperty("password", "kxg"); // 密码
- // 建立连接
- Connection connection = driver.connect(url, properties);
4.执行SQL语句
- String sql = "insert into actor values(1, 'jack', '男', '1970-1-1', '110');
- // Statement对象:用于执行静态的SQL语句并返回其生成的结果对象
- Statement statement = connect.createStatement();
- // 如果是DML语句,则返回影响的行数。即statement中存放的是执行语句数据库中受影响的行数
- int rows = statement.executeUpdate(sql);
- // 通过rows判断是否执行成功
- System.out.println(rows > 0 ? "成功" : "失败");
5.关闭资源
- statement.close();
- connect.close();
优化:
1.可以将数据库的相关信息写入properties配置文件中,通过配置文件读取信息
2.注册驱动时,通过反射获得类对象,newInstance()获得Driver实例
3.通过DriverManger代替Driver进行统一管理
- // 相关properties配置文件:
- user=root
- password=kxg
- url=jdbc:mysql://localhost:3306/db01
- driver=com.mysql.cj.jdbc.Driver
- // 连接数据库
- // 通过properties对象读取配置文件信息
- Properties properties = new Properties();
- properties.load(new FileInputStream("src//mysql.properties"));
- // 获取配置文件中的相关值
- String user = properties.getProperty("user");
- String password = properties.getProperty("password");
- String driver = properties.getProperty("driver");
- String url = properties.getProperty("url");
- // 利用反射加载driver类
- Class.forName(driver);
- // DriverManger创建连接
- Connection connection = DriverManger.getConnection(url, user, password);
- // 创建statement对象
- Statement statement = connection.createStatement();
- // 编写SQL语句
- String sql = "CREATE TABLE NEWS(id INT AUTO_INCREMENT, content VARCHAR(255), primary key(id));";
- // 执行SQL语句
- statement.executeUpdate(sql);
- // 关闭连接
- statement.close();
- connect.close();

介绍JDBC中常用的接口、类及其中的方法:
DriverManger:驱动管理类
getConnection(url, user, password):获取与数据库的连接
Connection接口:
createStatement():创建Statement对象
PreparedStatement(sql):生成预处理对象
Statement接口:
executeUpdate(sql):执行DML(update、insert、delete)语句,返回受到影响的行数
executeQuery(sql):执行查询(select)语句,返回ResultSet对象
execute(sql):执行任意SQL语句,返回布尔值
- // 演示SQL注入
- // 用户通过输入用户名、密码进行登录
- Scanner scanner = new Scanner(System.in);
- String name = "";
- String pwd = "";
- System.out.print("请输入用户名:");
- name = scanner.nextLine();
- System.out.print("请输入密码:");
- pwd = scanner.nextLine();
- // 建立与mysql的连接
- Properties properties = new Properties();
- properties.load(new FileInputStream("src//mysql.properties"));
- String user = properties.getProperty("user");
- String password = properties.getProperty("password");
- String url = properties.getProperty("url");
- String driver = properties.getProperty("driver");
- Class.forName(driver);
- Connection connection = DriverManager.getConnection(url, user, password);
- Statement statement = connection.createStatement();
- String sql = "select * from admin where name = '" + name + "' and password = '" + pwd + "';";
- // 执行SQL语句
- ResultSet resultSet = statement.executeQuery(sql);
- // 关闭资源
- resultSet.close();
- statement.close();
- connection.close();
-
- // 用户在进行登录时,输入数据库中已经存在的用户名、密码,显示登录成功
- // 但是如果用户输入用户名输入的是:"1' or",而密码输入的是"or '1' = '1"时,也可登录成功
- // 这就是SQL注入,同时 or '1' = '1 也被称为万能密码。

PreparedStatement接口:
executeUpdate(sql):执行DML(update、insert、delete)语句,返回受到影响的行数
executeQuery(sql):执行查询(select)语句,返回resultSet对象
execute(sql):执行任何SQL语句,返回布尔值
setObject(占位符索引, 占位符的值):解决SQL注入的问题
- // prepareStatement:预处理,可以解决statement中的SQL注入问题
- Scanner scanner = new Scanner(System.in);
- String name = "";
- String pwd = "";
- System.out.print("请输入用户名:");
- name = scanner.nextLine();
- System.out.print("请输入密码:");
- pwd = scanner.nextLine();
- // 获取相关值
- Properties properties = new Properties();
- properties.load(new FileInputStream("src//mysql.properties"));
- String user = properties.getProperty("user");
- String password = properties.getProperty("password");
- String url = properties.getProperty("url");
- String driver = properties.getProperty("driver");
- // 注册驱动
- Class.forName(driver);
- // 得到连接
- Connection connection = DriverManager.getConnection(url, user, password);
- // 组织SQL语句
- String sql = "select * from admin where name = ? and password = ?;"; // ?:相当于占位符
- // 创建prepareStatement对象,并且与SQL语句建立连接
- PreparedStatement preparedStatement = connection.preparedStatement(sql);
- // 赋值操作
- preparedStatement.setString(1, name); // sql语句中第一个?补成name
- preparedStatement.setString(2, pwd); // SQL语句中第二个?补成pwd
- // 接收结果集
- ResultSet resultSet = preparedStatement.executeQuery();
- // 关闭连接
- resultSet.close();
- preparedStatement.close();
- connection.close();

ResultSet结果集:
(光标一开始指向的是表格的最上面-第一行的上面(表头))
next():光标向下移动一行,如果没有下一行,返回false
previous():光标向上移动一行
getObject(列的索引/列名):返回对应列的值,接收类型为object
- // 通过ResultSet遍历表中的数据
- // resultSet.next():光标向后移动,如果没有下一行,则直接返回false
- while (resultSet.next()) {
- // 得到每一行的数据
- int id = resultSet.getInt(1);
- String name = resultSet.getString(2);
- String sex = resultSet.getString(3);
- String birth = resultSet.getString(4);
- String phone = resultSet.getString(5);
- System.out.println(id + "\t" + name + "\t" + sex + "\t" + birth + "\t" + phone);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。