JavaWeb——JDBC的基础用法
JDBC的基础用法
JDBC核心思想
JDBC API
JDBC是由多个接口和类进行功能实现的
类型 | 权限定名 | 简介 |
---|---|---|
class | java.sql.DriverManager | 管理多个数据库驱动类,提供了获取数据库连接的方式 |
interface | java.sql.Connection | 代表一个数据库连接(当connection不是null时,表示已连接数据库) |
interface | java.sql.Statement | 发送SQL语句到数据库工具 |
interface | java.sql.ResultSet | 保存SQL查询语句的结果数据(结果集) |
class | java.sql.SQLException | 处理数据库应用程序时所发生的异常 |
环境搭建
- 在项目下新建
lib
文件夹,用于存放jar
文件- 将mysql驱动
mysql-connector-java-5.1.25-bin.jar
复制到项目的lib
文件夹中- 选中
lib
文件右键Add as Libraay
(添加到库
),点击OK
JDBC开发步骤【重点】
1.注册驱动
使用
Class.forName("com.mysql.jdbc.Driver");
手动加载字节码文件到JVM中。
Class.forName("com.mysql.jdbc.Driver"); //加载驱动
2.连接数据库
- 通过DriverManager.getConnection(url,user,password)获取数据库连接对象
- URL:jdbc:mysql://localhost:3306/database
- username:root
- password:root
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","root","1234");
3.获取发送的SQl对象
通过Connection对象获得Statement对象,用于对数据库进行通用访问。
Statement statement = connection.createStatement();
4.执行SQL语句
执行SQL语句并接受执行结果
String sql = "insert into t_jobs(job_id,job_title,min_salary,max_salary) values('H5_Mgr','H5_Manager',4000,10000)";
int result = statement.executeUpdate(sql);
- 注意:在编写DML语句时,一定要注意字符串参数的符号是单引号'值'
- DML语句:增删改时,返回受影响行数(int类型)。
- DQL语句:查询时,返回结果数据(ResultSet结果集)。
5.处理结果
接受处理操作结果
if (result == 1){
System.out.println("Success");
}
- 受影响行数:逻辑判断、方法返回
- 查询结果集:迭代、依次获取
6.释放资源
先开后关原则
statement.close;
connection.close;
ResultSet (结果集)
在执行查询SQL后,存放查询到的结果集数据
1.接受结果集
ResultSet rs = statemnet.executeQuery("select * from t_employees;");
2.遍历ResultSet
中的数据
ResultSet以表(table)结构进行临时结果的存储,需要通过JDBCAPI将其中数据进行依次获取。
- 数据行指针:初始位置在第一行数据前,每调用一次boolean next()方法ResultSet的指针向下移动一行,结果为true,表示当前行有数据。
rs.getXxx(整数);
代表根据列的编号顺序获得,从1开始。rs.getXxx("列名");
代表根据列名获得。
//根据列的编号
ResultSet resultSet = statement.executeQuery("select * from t_jobs");
//处理结果
while(resultSet.next()){//判断下一行是否有数据
//对当前行每列数据进行获取 根据列的编号
String job_id = resultSet.getString(1);
String job_title = resultSet.getString(2);
String min_salary = resultSet.getString(3);
String max_salary = resultSet.getString(4);
System.out.println(job_id+"\t"+job_title+"\t"+min_salary+"\t"+max_salary);
}
//列名获取
ResultSet resultSet = statement.executeQuery("select * from t_jobs");
//处理结果
while(resultSet.next()){
String job_id = resultSet.getString("job_id");
String job_title = resultSet.getString("job_title");
String min_salary = resultSet.getString("min_salary");
String max_salary = resultSet.getString("max_salary");
System.out.println(job_id+"\t"+job_title+"\t"+min_salary+"\t"+max_salary);
}
常见错误
java.lang.ClassNotFoundException
:找不到类(类名书写错误、没有导入jar包)java.sql.SQLException
:与sql语句相关的错误(约束错误、表名列名书写错误)建议:在客户端工具中测试SQL语句之后再粘贴在代码中com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column
原因:列值Sting类型没有加单引号Duplicate entry'1'for key'PRIMARY'
原因,主键值已存在或混乱,更改主键值或清空表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column'password'in
- 原因:可能输入的值的类型不对,确定是否插入的元素时对应的值的类型正确