JDBC编程
JDBC —> java database connectivity 即java数据连接,
是执行sql语句的javaAPI(application programming interface),所谓的数据库是一类软件,就会提供对应的API,数据库有很多种,不同的数据库提供对应的API是不一样的,而这个API有java.sql.* 和 javax.sql.*包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库统一访问.
数据库是一种"客服端–服务器"的结构,服务器往往会处理多个客服端的请求,前面我们通过cmd的形式以sql代码发送至服务器,服务器需要进行的操作是先检查该代码的正确性再执行 而这种方式会增大服务器的工作量,于是就出现用代码来完成客服端与服务器的连接—JDBC编程
一、提示
优点:
1.Java语言访问数据库操作完全面向抽象接口编程
2.开发数据库应用不用限定在特定数据库厂商的API
3.程序的可移植性大大增强
准备工作:
在idea项目中创建文件夹lib,并把该文件复制到lib中,再配置该jar包到本项目的依赖中:通过右键lib找到把该文件添加到位库,进而才能识别这是个"库"
二:实现编程
1.实现数据源对象
DataSource dataSource = new MysqlDataSource();//向上转型
DataSource 是个接口描述了数据从哪里来,数据库的位置,要使用该接口的方法就需要使用实现该接口的子类
设置对象的属性
1.数据库服务器的位置
2.访问服务器的用户名
3.访问服务器的密码
((MysqlDataSource) dataSource).setUrl("");
//描述jdbc的用途是给mysql使用的
((MysqlDataSource) dataSource).setUser("");
//root -> mysql自带的用户 管理员用户 权限最高!
((MysqlDataSource) dataSource).setpassword("");
其中url的格式为:
ip地址(描述mysql服务器在那个主机上)+端口号(区分一个主机的应用程序)+数据库名+‘?’+额外参数(解释说明这次数据库的连接)+'&'关闭加密
2.和数据库服务器建立连接
方法依然是数据源里面的,不过返回值的类型是Connection对象
Connection connection = dataSource.getConnection();
注意:
1.使用该方法的时候,数据库可能会出现未知的问题,所以需要处理异常
在方法上声名该异常 或者使用 try …catch…
2.此处连接成功的原因是必须要保证访问的数据库IP/端口号/数据库名/相关参数/用户密码
3.构建sql语句
比如,添加一个学生
String str = "insert into student values(1,"张三")";
PrapredStatemet statement = connection.prepareStatement(sql);
PrapredStatemet :“预编译的语句”:用来解析该语句的准确性
同时注意方法依然是上一个connect对象里的方法,用来编译sql语句同时返回PrapredStatement对象
4.把sql发送到服务器上并执行
法一:直接添加数据
完成上一个操作后就需要把该语句发送到服务器上并执行该语句
此时就要用到方法
举例
//最关键的操作
statement.executeUpdate();
返回值是整型,也就是在数据库上真正修改的代码的行数
在命令行,执行成功返回的数字
除此之外,以上是用来增删改的一系列的操作在最关键的操作是
statement.executeUpdate(); 是正在和数据库服务器进行网络通信的
但是我们要在idea中进行查询某些数据的时候,有许多不同
此时方法是
ResultSet resultset = statement.executeQuery();
不出意外,返回的数据类型是"结果集合"故需要遍历,与迭代器的方法类似
while(resultSet.next()){
System.out.println(resultSet.getInt("id"));
System.out.println(resultSet.getString("name"));
}
栗子:
public class Test_jdbc2 {
public static void main(String[] args) throws SQLException {
//1.创建数据源
DataSource dataSource = new MysqlDataSource();
// 三个准备工作
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("liusan11");
//2.连接数据数据库服务器
Connection connection = dataSource.getConnection();
//3.构建sql语句
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
//遍历结果集合
while(resultSet.next()){
System.out.println(resultSet.getInt("id"));
System.out.println(resultSet.getString("name"));
}
//关闭资源
resultSet.close();
statement.close();
connection.close();
}
}
法二:通过控制台添加数据
public class jdbc3 {
public static void main(String[] args) throws SQLException {
//0.输入操作
Scanner scan = new Scanner(System.in);
System.out.println("请输入id :");
int id = scan.nextInt();
System.out.println("请输入名字 :");
String name = scan.next();
//1.创建数据源 并设置3个属性
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("liusan11");
//2.获取连接对象
Connection connection = dataSource.getConnection();
//3.构造sql语句
String sql = "insert into student values(?,?)";//? 表示占位符
PreparedStatement statement = connection.prepareStatement(sql);
//匹配占位符的顺序和类型 方法同样!
statement.setInt(1,id);
statement.setString(2,name);
//4.发送到服务器
int n = statement.executeUpdate();
System.out.println(n);
//5.释放资源
statement.close();
connection.close();
}
}
5.释放资源
statement.close();
connection.close();
resultSet.close();
这里必须要保证顺序与先前的相反!
总结
大概就这样了,本节内容主要就是通过java代码来实现客服端和服务器的通信,重点在于实现代码编程可以分以下几个步骤
1.创建数据源对象 2.建立客服端和服务器的关系3.创建sql代码并发送到服务器执行4.释放资源
每个步骤都建立依赖的联系:关系从数据源对象中方法得来,预编译语句从关系的编译中的方法而来,只要记住这个规律,代码手到擒来,每一句代码实现的原因以及这个过程都是显而易见的!