目录
mysql提供了一组API来让用户实现客户端 API(mysql提供的一些方法)
不同的关系数据库提供不同的API,而API也没有一个统一标准,所以API接口会有所不同
java是可以跨平台的,java就提出了JDBC,里面包含了一套API,各个厂商为此提供不同的驱动,程序员可以借助一套JDBC来操作不同的数据库
1、创建java项目
2、下载mysql的驱动包,导入java项目
第一步:创建目录
第二步:将mysql的驱动包导入目录
第三步:右键目录,点击Add as Library
JDBC编程语言
1、设置数据源
DataSource接口
public static void main(String[] args) {
DataSource dataSource = new MysqlDataSource();//向上转型
//DataSource是一个接口,创建DataSource对象表示数据库在哪
//MysqlDataSource 是 DataSource接口的实现类
//设置数据库的地址
((MysqlDataSource) dataSource ).setURL();//向下转型
//设置登录数据库的用户
((MysqlDataSource) dataSource).setUser();
//设置登录数据库的密码
((MysqlDataSource)dataSource).setPassword();
}
可以不进行向上,向下转化,但是这个更加常见
但是向上转型,dataSource是DataSource类型的,更方便于以后出现数据库切换的情况
public static void main(String[] args) {
DataSource dataSource = new MysqlDataSource();//向上转型
//URL:就是我们说的网址
//设置数据库的地址
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
//设置登录数据库的用户
((MysqlDataSource) dataSource).setUser("root"); //root是mysql默认自带的管理员用户
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("123");//安装mysql时的密码
}
mysql的更高版本在以上内容可能多加&allowPublicKeyRetrieval=true
原因:在MySQL8.0数据库重启后,第一次连接数据库时会出现这个错误: Public Key Retrieval is not allowed
2、将代码和数据库建立连接
Connection接口
//2、将代码和数据库建立连接
Connection connection=dataSource.getConnection();//需要抛出异常
3、操作数据库
先在mysql数据库中,设置好student数据库,创建表
Connection接口内的一个方法:
PreparedStatement接口:将sql语句包装成为“语句对象”
PreparedStatement接口的方法:
- 插入信息
public static void main(String[] args) throws SQLException {
//1、设置数据源
DataSource dataSource = new MysqlDataSource();//向上转型
//URL:就是我们说的网址
//设置数据库的地址
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
//设置登录数据库的用户
((MysqlDataSource) dataSource).setUser("root"); //root是mysql默认自带的管理员用户
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码
//2、将代码和数据库建立连接
Connection connection = dataSource.getConnection();//需要抛出异常
//3、操作数据库 使用sql语句
//插入记录
String sql = "insert into stu values(1,'张三')";//参数化的SQL语句
PreparedStatement preparedStatement= connection.prepareStatement(sql);
//创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库
//4、执行sql语句
int ret=preparedStatement.executeUpdate();//update,insert,delete操作 返回值int,表示修改影响了数据库的几条记录
System.out.println(ret);
//5、释放资源
//先释放preparedStatement,后释放connection
preparedStatement.close();
connection.close();
}
执行代码完毕之后,在数据库查看记录:
代码执行成功
如何实现将用户输入信息插入呢?
String sql="insert stu values(?,?)";//使用?替代未知量
借助PreparedStatement 接口的set系列方法 将?替换为传入值
public static void main(String[] args) throws SQLException {
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
//设置登录数据库的用户
((MysqlDataSource) dataSource).setUser("root"); //root是mysql默认自带的管理员用户
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码
Connection connection= dataSource.getConnection();
Scanner scanner=new Scanner(System.in);
String sql = "insert stu values(?,?)";//使用?替代未知量
PreparedStatement preparedStatement = connection.prepareStatement(sql);
int i=2;
while(i-->0) {//可以实现循环,多条插入
System.out.println("用户输入待插入学生序号和姓名");
int id = scanner.nextInt();
String str = scanner.nextLine();
preparedStatement.setInt(1, id);
//1是因为在sql中,id是第1个?所需要传入的参数
preparedStatement.setString(2, str);
//2是因为在sql中,str是第2个?所需要传入的参数
preparedStatement.executeUpdate();
}
preparedStatement.close();
connection.close();
}
2、删除信息
public static void main(String[] args) throws SQLException {
//1、数据库源
DataSource dataSource=new MysqlDataSource();
( (MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
( (MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码
//2、获取连接
Connection connection=dataSource.getConnection();
//3、执行语句
String sql="delete from stu where id=?";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
Scanner scanner=new Scanner(System.in);
System.out.println("请输入删除信息的id号");
int id=scanner.nextInt();
preparedStatement.setInt(1,id);
preparedStatement.executeUpdate();
//4、释放资源
preparedStatement.close();
connection.close();
}
3、修改信息
public static void main(String[] args) throws SQLException {
//1、数据库源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码
//2、获取连接
Connection connection = dataSource.getConnection();
//3、执行语句
String sql = "update stu set name=? where id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入修改信息的id号及修改后的学生姓名");
int id = scanner.nextInt();
String name = scanner.nextLine();
preparedStatement.setInt(2, id);
preparedStatement.setString(1, name);
preparedStatement.executeUpdate();
//4、释放资源
preparedStatement.close();
connection.close();
}
4、查看信息
使用PreparedStatement接口的方法
public static void main(String[] args) throws SQLException {
//1、数据库源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false" +
"&allowPublicKeyRetrieval=true");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123");//按照mysql时的密码
//2、获取连接
Connection connection = dataSource.getConnection();
//3、打包字符串成为sql语句
String sql="select * from stu";
PreparedStatement preparedStatement=connection.prepareStatement(sql);
// 4、执行语句 查询结果返回一个表,使用类ResultSet接收
ResultSet resultSet = preparedStatement.executeQuery();
//类比数组,光标先执行arr[-1],next()执行,光标指向arr[0],arr【0】不存在返回false
while (resultSet.next()) {//光标前移
//光标指向每一行,提供每一行获取所有列的元素
int id = resultSet.getInt("id");//获得id列
String ret = resultSet.getString("name");//name列
System.out.println("id: " + id + " name: " + ret);
}
//5、释放资源
preparedStatement.close();
connection.close();
}
5、创建数据库
public static void main(String[] args) throws SQLException {
//1、数据库源
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false" );
( (MysqlDataSource)dataSource).setPassword("123");
( (MysqlDataSource)dataSource).setUser("root");
//2、连接
Connection connection=dataSource.getConnection();
//3、包装sql语句
String sql="CREATE DATABASE ebook CHARACTER SET 'utf8mb4'";
PreparedStatement preparedStatement= connection.prepareStatement(sql);
//4、执行
preparedStatement.execute();
//5、关闭资源
preparedStatement.close();
connection.close();
}