JDBC
JDBC是干啥的呢?
简单来说就是用java代码操作数据库
各种数据库,在开发的时候,就会提供一组编程接口(API)
API:Application Program Interface
简单来说就是有个软件,这个软件给你一些功能,你基于这些功能能对这个软件干啥
API往往是以 函数,类 的形式来提供的,说白了就是这个API在这个程序里面就是一组函数,只不过这组函数不是你自己实现的,而是人家那个程序提供给你的,你基于这些API,可以对这个程序进行各种操作
各种数据库一开始提供的api是不一样的,但是程序员学习多种api又很费劲,这就需要一个很有地位的大佬来调节,就是Java,java跟这些数据库开发者说你们底层的api不用动,然后你们共同封装一下你们自己的api,然后对接到我的api上,java提供的这一套api就叫JDBC
因此,java程序员要想进行数据库开发,就需要在你的项目中导入对应的数据库的驱动包,才能编写代码,数据库的驱动是能让JDBC认识数据库的api
怎么引入数据库驱动包呢?
这里是用的maven的中央仓库,点下面
maven中央仓库
进入之后搜索mysql
选这个
进去之后,有很多版本,注意这个 版本要跟你的mysql版本一致,我的是5.xx的,所以也要选5.xx的,小版本随意,大版本一致就好
如果你不知道你的mysql版本,输入select version();查看就好
我用的5.1.49
进去之后,点
什么是jar呢?
java通过.java源文件编译成.class文件,jvm来解释执行.class
每个.java都对应一个.class文件,如果代码里.java非常多,就可以把一大堆的.class文件给打包成压缩包,这个压缩包的后缀就是.jar,把jar拷贝给对方,对方就可以直接使用jvm来运行了,此处mysql驱动包的这个jar不是单独运行的jar,可以把它导入到咱们的项目,然后就可以调用其中的方法和类来进行编程了
怎么导入jar包呢?
第一步
创建好一个Directory之后,把你下载好的包复制粘贴到这里就好了,此处我的这个Directory就叫jar
注意不用你自己解压,jvm会自己识别
第二步把这个jar包标记成一个库
成功之后见下图
弄好之后,idea就能识别这个目录里的jar包,从而就可以调用里面的类来写代码了
编写JDBC代码
JDBC看起来麻烦,实际上非常简单,这里的代码刚开始接触会觉得很麻烦,设计很多新的类,新的方法马,新的概念,新的参数啥的,但是多写几次就会发现,这里的代码就是固定套路
JDBC的创建分为以下几个步骤:
1.创建并初始化一个数据源
(数据源就是描述数据库服务器在哪里,jdbc提供了一个叫DataSource的接口)
2.和数据库服务器建立连接
3.构造sql语句
4.执行sql语句
5.释放必要的资源
下面来一个插入数据库的代码块
插入
public class JDBCInsert {
public static void main(String[] args) throws SQLException {
//1.创建并初始化一个数据源
//DataSource是一个接口,所以不能直接new一个DataSource
DataSource dataSource=new MysqlDataSource();//向上转型
//再转回来,setUrl这个方法是子类独有的,要想获取数据源,就必须用这个方法,要想获取这个方法,就要向下转型
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/xiaobai?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("021018");
//2.和数据库建立连接
Connection connection=dataSource.getConnection();
//3.构造sql语句
String sql="insert into student value(1,'张三')";
PreparedStatement statement= connection.prepareStatement(sql);
//4.执行sql语句
int ret=statement.executeUpdate();
System.out.println(ret);
//5.释放必要资源
statement.close();
connection.close();
}
}
下面是进阶版
public class JDBCInsert
{
public static void main(String[] args) throws SQLException
{
Scanner scanner = new Scanner(System.in);
//1.创建并初始化一个数据源
//DataSource是一个接口,所以不能直接new一个DataSource
DataSource dataSource=new MysqlDataSource();//向上转型
//再转回来,setUrl这个方法是子类独有的,要想获取数据源,就必须用这个方法,要想获取这个方法,就要向下转型
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/xiaobai?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("021018");
//2.和数据库建立连接
Connection connection=dataSource.getConnection();
//3.从控制台读取用户输入的数据
System.out.println("请输入学生姓名: ");
String name = scanner.next();
System.out.println("请输入学号: ");
int id = scanner.nextInt();
//4.构造sql语句
String sql = "insert into student value(?, ?)";
PreparedStatement statement= connection.prepareStatement(sql);
statement.setInt(1, id);
statement.setString(2, name);
//可以把这个对象打印出来看一下效果,如果你执行这个代码出错了,你就可以把里面的这个对象打印出来,看看这里哪里有语法错误
//System.out.println(statement);
//5.执行sql语句
int ret=statement.executeUpdate();
System.out.println(ret);
//6.释放必要资源
statement.close();
connection.close();
}
}
查询
public static void main(String[] args) throws SQLException {
// 1. 创建并初始化数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("2222");
// 2. 建立连接
Connection connection = dataSource.getConnection();
// 3. 构造 SQL
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);
// 4. 执行 SQL
ResultSet resultSet = statement.executeQuery();
// 5. 遍历结果集合
while (resultSet.next()) {
// 把 resultSet 想象成一个表格. 同时表格这里有个光标, 初始情况下光标指向表最上面~~
// 每次调用 next, 光标往下走一行~~
// 当光标指向某一行的时候, 就可以通过 getXXX 来获取到当前这行里的数据
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = " + id + ", name = " + name);
}
// 6. 释放资源
resultSet.close();
statement.close();
connection.close();
}