目录
1.创建数据源对象,数据源对象就描述了要访问的数据库是什么,在哪?
JDBC是什么?
全称:Java Database Connectivity(Java数据库连接),是由标准库提供的一套API,使得Java可以通过这些接口实现与数据库的连接,为多种关系数据库提供同一访问。
所需环境
JDBC在使用的时候,需要下载并导入对应的数据库的驱动包(以下使用Java代码来操作MySQL),建议大家去官网(
)找到对应的jar包,以下为官网链接
Maven Repository: Search/Browse/Explore (mvnrepository.com)
将下载好的jar包导入到项目中
1.创建一个与.idea同级的包,起个名字叫:“lib”~;
2. 将jar包拷贝到lib中
3.右击lib标记成存放库文件(jar包)的目录,然后,IDEA就可以识别目录中的jar包
这里可以看到jar包可以展开了,说明IDEA可以对其进行识别
以上就是准备过程~
现在来用Java代码操作MySQL~
1.创建数据源对象,数据源对象就描述了要访问的数据库是什么,在哪?
//来自标准库JDBC的接口
import javax.sql.DataSource;
//来自MySQL的驱动包(jar包)
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
DataSource dataSource = new MysqlDataSource();
解释和分析:DataSource描述了在哪里能找到数据库数据,其实也可以使用DriverManager,但是更推荐DataSource,因为DriverManager每次getConnection都需要重新建立连接,而DataSource是内置连接池,类似String的字符串常量池,连接复用,提高效率
2.找地址(URL体现出数据库服务器的位置,以及名字)
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false");
解释和分析:
jdbc:mysql是协议名称;
//127.0.0.1是IP地址,描述了网络上一个主机的位置,127.0.0.1是一个特殊的地址,无论IP是什么,都可以用127.0.0.1表示自己;
3306是端口号,用来区分主机上的不同应用程序,在安装数据库时,其中一个环节就是配置端口号,默认就是3306;
user是要访问的数据库的名字(通过create database创建的);
characterEncoding=utf8是刻划断使用的字符集,要和服务器那边一致,所以这里使用utf8;
useSSL=false这里表示不加密;
3.设置打开数据库的钥匙
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("123456");
解释和分析:输入登录用户名,和密码,用户名一般同一是root,这时MySQL自带的,密码就是安装数据库时设置的密码
4.访问连接
//建立连接,注意这里要抛异常
Connection connection = dataSource.getConnection();
解释和分析:和数据库服务器连接,再进行后续操作
5.用户输入
//通过用户输入来改变数据库中的值a
Scanner scanner = new Scanner(System.in);
System.out.println("请输入员工ID:");
int ID = scanner.nextInt();
System.out.println("请输入员工姓名:");
String name = scanner.next();
//执行构造的sql语句
// ? 是一个占位符,只是占个位置,后面会被替换成其他的东西
String sql = "insert into staff values(?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
//1 2 数字表示占位符下标,默认从1开始,set方法是一个系列:setXXX(XXX表示类型)
statement.setInt(1, ID);
statement.setString(2, name);
System.out.println(statement);
解释和分析:通过用户输入数据来确定插入的值,注意这里最好不要用字符串拼接的方式:1.代码很乱;2.容易引发SQL注入漏洞——被黑客攻击
6.执行sql语句
//执行sql,方法有两种:
//executeUpdate 对应插入删除修改语句. 返回值表示这次 SQL 操作影响到的行数.
//executeQuery 对应查询语句. 返回值则是返回的临时表数据.
int n = statement.executeUpdate();
System.out.println("n = " + n);
7.释放关闭相关资源
//最后关闭释放相关资源(注意,先创建的后释放,后创建的先释放)
statement.close();
connection.close();
解释和分析:
注意要先创建的后释放,后创建的先释放!
问题:为什么要释放?new一个对象要消耗空间资源,为什么以前没有释放过?
那个是Java内置的GC机制,帮咱释放了,但只是能回收对象,也不是万能的;
面试题:
1.数据库Statement和PreparedStatement有什么联系和区别?
联系:PreparedStatement继承自Statement,都是接口;
区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高;
2.数据库连接有哪些方式?分别有什么区别
1.通过DriverManager(驱动管理类)的静态方法获取;
2.通过DataSource(数据源)对象获取;
区别:DriverManager每次getConnection都需要重新建立连接,而DataSource是内置连接池,类似String的字符串常量池,连接复用,提高效率;
结语:
这里基于JCBC写的代码本质上是一个MySQL客户端,未来工作中大部分的数据库操作,都是通过代码来完成的;实际开发中,很少会直接使用JDBC,代码比较啰嗦,实际开发中会用到一些库/框架 简化这里的数据库操作(MyBatis),各种库和框架本质上又是对JDBC进行的封装;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/124339.html