java连接数据库有四种类型,这里讲第三种类型:网络协议连接,通过提供数据库的url,user,password获取连接。在java中所有与数据库操作的类和接口都在java.sql中,
- 一个类:DriverManager
- 四个接口:Connection,Statement,PreparedStatement,ResultSet
连接数据库的操作形式都是固定的,按照四个步骤完成:
- 向容器中加载数据库驱动;
- 获取数据库连接(每一次连接都需要Connection对象,通过DriverManager获得)
- 设置SQL语句,执行数据CRUD(增删改查,获取ResultSet循环输出)
- 关闭数据库连接(可直接关闭Connection)
具体步骤
第一步
MySql驱动程序类:com.mysql.jdbc.Driver
Oracle驱动程序类:oracle.jdbc.driver.OracleDriver
加载类Class.forName("com.mysql.jdbc.Driver");
第二步
数据库连接通过DriverManager类完成,提供有如下方法:
public static Connection getConnection(String url,String user,String password)throws SQLException,所以连接数据库需要提供以下几个信息:
- 数据库的连接地址:“jdbc:mysql://localhost:3306/student”,(student为数据库名,oracle为jdbc:oracle:thin:@loaclhost:1521:school)
- 数据库的用户名,MySQL自己设置用户名,而oracle是固定的,user=scott;
- 数据库的密码,MySQL自己设置密码,而oracle是固定的,password=tiger;
在JDBC中,每一个数据库连接都要求Connection对象封装,所以只要有一个Connection对象就表示一次数据库连接。
第三步
执行CUDR,由于Statement没有sql预处理功能,已被淘汰,现在全部用PreparedStatement
数据更新,返回影响行数:
public int executeUpdate(String sql)throws SQLException;数据查询,返回ResultSet对象:
public ResultSet executeQuery(String sql) throws SQLException;
第四步:
关闭数据库:public void close() throws SQLException
完整代码如下:
package com.dao.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Test{
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/school";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static void main(String[] args) throws Exception {
//第一步,加载数据库
Class.forName(DRIVER);
//第二步,连接数据库
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//第三步,进行CUDR
//1.数据更新
String sql="delete from grade where grade_id=? and grade_name = ?";
PreparedStatement preStmt = conn.prepareStatement(sql);
//设置数据,第一个参数为占位序号,第二个参数为值
preStmt.setInt(1, 7);
preStmt.setString(2, "大三");
int len = preStmt.executeUpdate();
System.out.println("影响的行数:"+len);
//2.数据查询
sql="select grade_id,grade_name from grade where grade_id = ?";
preStmt.setInt(1, 2);
ResultSet re = preStmt.executeQuery();
while (re.next()) {//输出数据
int employee_id = re.getInt(1);
String last_name = re.getString(2);
double salary = re.getDouble(3);
System.out.println(employee_id+","+last_name+","+salary);
}
//第四步,关闭数据库
conn.close();
}
}