꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客系列专栏:xiaoxie的MySql学习系列专栏——CSDN博客●'ᴗ'σσணღ
我的目标:"团团等我💪( ◡̀_◡́ ҂)"( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝+关注(互三必回)!
JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
首先我们需要打开中央仓库Maven Repository: Search/Browse/Explore (mvnrepository.com)
1.帮刚才下载好的这个.jar文件复制
2.粘贴到你要连接数据库的相应的文件
3.再右键点击.jar文件,添加为库
4.完成结果展示
这里博主就在MySql上随意创建了一张students表作为测试使用(当然你也可以在IDEA创建,不过一般来说我们都是在MySql上提前创建好表)
create table students(id int primary key ,name varchar(20),age int);
DataSource 数据源.
要操作的数据库,数据, 是在哪里,
在 MySQL 中,就需要设定好,MySQL 服务器的位置,要访问的数据库的名字,访问数据库的用户名和密码.
// 1. 创建 "数据源" (DataSource) DataSource dataSource = new MysqlDataSource(); ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/textcharacterEncoding=utf8&useSSL=false"); ((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource) dataSource).setPassword("010920");
1. ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/textcharacterEncoding=utf8&useSSL=false");
URL:
协议的名称://ip地址:端口号/数据库名?参数=值&参数=值
一般来说,只需要你修改一下数据库名,别的复制粘贴即可
2. ((MysqlDataSource) dataSource).setUser("root");
设置用户名,mysql 中可以手动创建各种名字的用户默认会自带一个 root 用户root 是一个管理员账户,(权限最大的账户),一般这段也是照抄即可
3. ((MysqlDataSource) dataSource).setPassword("010920");
设置密码,输入你当时数据库设置的密码即可,如果你没有设置密码的话可以将密码设置为一个空字符串或者null.
((MysqlDataSource) dataSource).setPassword("");//空字符串 ((MysqlDataSource) dataSource).setPassword(null);//null
同时需要注意的是不同数据库这里的操作不一样,这里博主介绍的是Mysql数据库的操作方法,对于别的数据库操作不一样
进行 客户端·服务器 之间通信的时候,常见有两种通信的模式:
1)有连接 (JDBC 这里, 就属于是"有连接” 就需要先拨号)
2)无连接
Connection connection = dataSource.getConnection();
注意这里可能会出现异常,我们需要抛出异常
如果一切顺利,连接建立成功,此时就能够得到 Connection 对象.在 getConnection 很可能失败的(服务器没有接受连接)原因有很多种,包括不限于:
1)数据库服务器没有正确启动.
2) url 写错了
3)用户名写错了
4) 密码写错了
5)网络断开了(网线掉了...)
.....
String sql = "insert into students values(1,'张三',18)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
通过使用PreparedStatement对象,可以有效地执行SQL语句并防止SQL注入攻击。
int n = preparedStatement.executeUpdate(); System.out.println("n = " + n);
这段代码是在Java中使用PreparedStatement对象执行更新操作,并获取更新的行数。具体来说,这段代码做了以下几件事情:
总之,这段代码执行了SQL更新操作,并输出了更新的行数。
结果:
这里显示的就是我们对students表的插入操作,并更新了1行结果
这时我们在查看数据库的信息可以看到如下结果
这样就实现了通过java来交互数据库的数据了;
preparedStatement.close(); connection.close();
执行完毕, 有收尾操作. 释放前面创建的各种资源.主要是释放 语句对象 和 连接对象. DataSource 是不必释放的.
大家都知道,jvm会帮我们做收尾工作,为什么我们还需要手动释放呢,我们手动释放是为了:
在Java中,当使用完数据库连接和PreparedStatement等资源后,最好手动关闭这些资源以释放数据库连接和其他相关资源,而不是依赖JVM的垃圾回收机制来释放资源。尽管JVM会在适当的时候回收不再使用的对象,但是对于数据库连接等资源,及时手动关闭是一个良好的编程习惯,可以避免资源泄霍和提高程序的性能。
我们刚刚看到前面的第四点,构造Sql语句时,我们是直接定好了要输入的数据,当如果我们想手动输入数据的话我们可以使用如下的方法
Scanner scanner = new Scanner(System.in); System.out.println("请输入学号: "); int id = scanner.nextInt(); System.out.println("请输入姓名: "); String name = scanner.next(); System.out.println("请输入年龄: "); int age = scanner.nextInt(); String sql = "insert into students values(?, ?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, id); preparedStatement.setString(2, name); preparedStatement.setInt(3, age);
查看结果:
这里也可以执行多条Sql语句,使用一下循环即可,这里就不过多的赘述
public static void main(String[] args) throws SQLException { DataSource dataSource = new MysqlDataSource(); ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/text?characterEncoding=utf8&useSSL=false"); ((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource) dataSource).setPassword("010920"); Connection connection = dataSource.getConnection(); Scanner scanner = new Scanner(System.in); System.out.println("请输入学号: "); int id = scanner.nextInt(); System.out.println("请输入姓名: "); String name = scanner.next(); System.out.println("请输入年龄: "); int age = scanner.nextInt(); String sql = "insert into students values(?, ?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, id); preparedStatement.setString(2, name); preparedStatement.setInt(3, age); int n = preparedStatement.executeUpdate(); System.out.println("n = " + n); preparedStatement.close(); connection.close(); }
上文介绍了插入操作的过程,由于删除操作和,修改操作都差不多,只需要修改Sql语句,博主就不过多的赘述了,这里解释一下与它们不同的查询操作的写法
public static void main(String[] args) throws SQLException { DataSource dataSource = new MysqlDataSource(); ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/text?characterEncoding=utf8&useSSL=false"); ((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource) dataSource).setPassword("010920"); Connection connection = dataSource.getConnection(); Scanner scanner = new Scanner(System.in); System.out.println("请输入要查询的学生姓名: "); String name = scanner.next(); String sql = "select * from students where name = ?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, name); ResultSet resultSet = preparedStatement.executeQuery(); while(resultSet.next()) { int id = resultSet.getInt("id"); String studentName = resultSet.getString("name"); int age = resultSet.getInt("age"); System.out.println("学号: " + id + ", 姓名: " + studentName + ", 年龄: " + age); } preparedStatement.close(); connection.close(); }
在执行查询操作时,与执行插入操作相比,有以下不同之处:
这些是执行查询操作与插入操作的主要不同之处。在实际开发中,根据具体需求和业务逻辑,会有更多细微的差别和处理方式。
查询结果如下:
如果出现上面这样的错误,你就应该要查看是否IP输入错误,或者是端口号输入错误
如果出现上面这样的错误,你就应该要查看你数据库名是否输入错误
这个时候你就要检查一下密码和用户名是否输入失败了,如果你忘记密码的话可以执行以下几点步骤:
1. 关闭正在运行的MySQL服务。win+r输入:services.msc回车,找到MySQL,手动关闭MySQL服务
2. 打开DOS窗口,利用cd命令转到mysql的bin目录:建议直接找到mysql的bin目录下输入cmd回车3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
4. 再开一个DOS窗口(刚才那个DOS窗口已经不能动了),转到mysql的bin目录。
5. 输入mysql回车,如果上面修改成功,将直接出现 mysql> 这样的提示符。
6. 连接权限数据库:use mysql
6. 改密码:update user set password=password("123") where user="root";
7. 刷新权限(必须步骤):flush privileges; (不要忘记分号)
8.exit或者ctrl+c退出,进行重新登陆
以上就是JDBC的所有内容了,感谢你的阅读