在面试中经常被问到Jdbc,然后自己也回忆不起来多少了,现在写东西都是直接用的框架,框架自己就帮我们处理好了,我们只是自己用它提供好的方法,今天在这里总结一下。
1.1JDBC概述
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。JDBC是 Java访问数据库的 标准规范,可以为不同的关系型数据库提供统一访问,
它由一组 Java语言编写的接口和类组成。
jdbc的方式
JDBC规范(掌握四个核心对象):
类: DriverManager:用于注册驱动接口:
Connection: 表示与数据库创建的连接
PreparedStatement : sql语句发射器
ResultSet: 结果集或一张虚拟表
现在我要做的是用我的java代码去连接mysql 数据库
第一步:mysql-connector-java 5.1.47,版本大家随意,但是一般我都不会用最新的,我会用相对来说最稳定的。
jdbc连接mysql代码
@Test
public void show() throws Exception {
// 1.注册mysql驱动
// Class.forName("com.oracle.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver");
// 2.通过DriverManager获取到onetwo数据库的链接
//url 用来描述链接到哪个数据库上
String url = "jdbc:mysql://localhost:3308/onetwo";
Connection connection = DriverManager.getConnection(url, "root", "root");
// 3.通过链接获取SQL的发射器
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM t_mark ORDER BY score DESC LIMIT 5,5");
// 4.发射器执行SQL语句得到结果集
ResultSet resultSet = preparedStatement.executeQuery();
// 5.处理结果集
// 先判断它下一个有没有
while (resultSet.next()) {
int id = resultSet.getInt("id");
int courseId = resultSet.getInt("courseId");
int studentId = resultSet.getInt("studentId");
int score = resultSet.getInt("score");
System.out.println("id:" + id + " courseId:" + courseId + " studentId:" + studentId + " score:" + score);
}
// 6.关闭资源
resultSet.close();
preparedStatement.close();
connection.close();
}
mysql中的数据
测试成功
1.2API详解
1.2.1API详解:注册驱动
语法: Class.forName(“com.mysql.jdbc.Driver”);
固定写法: com.mysql.jdbc.Driver 是MySQL数据库的驱动类
通过反射获取com.mysql.jdbc.Driver对象时底层会直接注册驱动
其他写法:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用
原因是:
导致驱动被注册2次。
强烈依赖数据库的驱动jar
1.2.2API详解:获得链接
接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的 .Connection conn = DriverManager.getConnection(url, user, password);
语法:static Connection getConnection(String url, String user, String password)
试图建立到给定数据库 URL 的连接。
参数说明:url 需要连接数据库的位置(网址) user用户名 password 密码
例如:getConnection(“jdbc:mysql://localhost:3306/day06”, “root”, “root”);
URL:SUN公司与数据库厂商之间的一种协议。
jdbc:mysql://localhost:3306/day06
协议:子协议:// IP :端口号/数据库
oracle数据库: jdbc:oracle:thin:@localhost:1521:sid
1.2.3API详解:java.sql.PreparedStatement接口: 操作sql语句,并返回相应结果
String sql = “某SQL语句”;
PreparedStatement pst = conn.prepareStatement(sql);
对象pst就是SQL语句的发射器,可以发射SQL语句,并获取执行结果
常用方法:
- int executeUpdate(String sql); --执行insert update delete语句.
- ResultSet executeQuery(String sql); --执行select语句.
- boolean execute(String sql); --仅当执行select并且有结果时才返回true,执行其他的语句返回false.
1.2.4API详解:处理结果集(注:执行insert、update、delete无需处理)
ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据:
rs.next();//判断下一行有没有数据,如果有返回true否则返回false
rs.getInt(1);//获取第一行第一列的数据
常用方法:
- Object getObject(int index) // Object getObject(String name) 获得任意对象
- String getString(int index)// String getString(String name) 获得字符串
- int getInt(int index)//int getInt(String name) 获得整型
- double getDouble(int index)// double getDouble(String name) 获得双精度浮点型