Java连接MySQL数据库
创始人
2024-01-25 13:54:58
0

数据库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);
}

相关内容

热门资讯

海军山东舰航母编队圆满结束访问...   新华社香港7月7日电(黎云、张懋瑄)海军山东舰航母编队7日上午圆满结束为期5天的访问,驶离香港。...
创业只选万创中国 创业只选万创... 6月30日,“万众创新公共服务平台简称万创中国平台”正式上线新闻发布会在北京隆重召开。同时,万创中国...
装修的项目经理的职责有哪些? ... 内容来自用户:李鹏亚装修项目经理岗位职责【篇一:装饰公司项目经理职责】【装饰公司项目经理职责】好的设...
万创中国举办创新创业大赛 万创... 4月21日,2017海峡两岸青年创业大赛—泉州赛区决赛在泉州海丝国际中心四楼海丝国际厅成功举办。泉州...
万创中国安卓版(创业服务平台)... 万创中国安卓版(创业服务平台)是一款专为创业者准备的手机应用,是中国超有价值的万众创新公共服务平台,...
10大国外代理服务器网站 10...   国外代理市场如今已经非常火热,可以说当前的国外代理ip是五花八门,所以导致了大家在选择平台的时候...
小玩意饰品加盟、加盟费多少 总... 小玩意饰品品牌是广州市盈芷贸易有限公司旗下的饰品品牌。为满足广大时尚女孩的需求,引进日韩潮流元素,小...
饰品店加盟哪家好 十大排行榜分... 八、啊呀呀七彩花饰品店加盟费用:10-20万啊呀呀.七彩花隶属于啊呀呀国际时尚,是由最懂生活和设计的...
开一家乡村基加盟店大概需要多少... 开一家乡村基加盟店大概需要多少钱?在如今这样一种大好的经济形势下,自由创业者也越来越多,大家都希望能...
重庆乡村基加盟费用 重庆乡村基... 重庆乡村基加盟条件1目前可以申请参加“合作伙伴”的地区有哪些?目前“合作伙伴”计划仅在贵州省和云南省...