JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问
目录
JDBC的使用:
1.下载驱动包,并添加到项目当中
2.编程语句
2.1创建数据源
2.2与数据库建立连接
2.3构造sql语句
2.4执行sql语句
2.5释放资源
3.完整代码
驱动包下载地址:Maven Repository: mysql » mysql-connector-java (mvnrepository.com)
下载jar包
按照MySql版本下载成功后,添加到对应要使用的项目当中.
对项目进行右键,创建一个新的文件夹(文件名随意)
下载完成的mysql驱动包右键选择复制,再对刚刚创建完成的文件夹Ctrl + v.
点击OK即可
右键添加驱动包的文件夹,选择Add as Library(让IDEA知道,这个文件夹作为存放库文件)
现在就正式的完成了对驱动包的添加
DataSource是一个接口,为我们指明了数据库服务的位置
这一步我们要做的,主要是创建一个MysqlDataSource对象,并用DataSource类型来接收
MysqlDataSource是DataSource的一个子类,我们使用了向上转型主要是为了减少其耦合性,方便日后更换其他驱动包.
setURL/setUrl()方法:
URL是唯一资源定位符,用来在网络上描述资源的位置.
jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false
URL的类型/用途,此处为Mysql进行服务
这个位置要存放的是数据库所在的设备的IP,而127.0.0.1为环回地址,指代自己的主机,即数据库与JAVA代码在用一台设备
端口号,用来区分主机上的进程
访问的数据库的名称,即打开Mysql后use table_name,的那个table_name
统一字符集为utf8
数据库与客户端之间的通信与否
setUser()方法:
用来放置要登录的数据库账户的用户名
setPassword()方法:
放置登录账号的密码
DataSource dataSource = new MysqlDataSource();//创建一个datasource对象
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("111111");
Connection connection = dataSource.getConnection();
要选择java.sql的Connection接口,并在类上抛出相应的异常
public static void main(String[] args) throws SQLException{}
String sql = ""; // 写出一个mysql语句 PreparedStatement statement = connection.prepareStatement(sql); //对mysql语句进行预处理,验证mysql语句是否符合语法要求,能减轻mysql服务器的负担也可以使用
Statement statement = connection.createStatement();//不进行处理,传输到mysql服务器上
方法一:
String sql = "insert into employee values('xiaoming','111','male')";
PreparedStatement statement = connection.prepareStatement(sql);
方法二:
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
String id = scanner.next();
String sex = scanner.next();
String sql = "insert into employee values(" + name + ", " + id + ", " + sex + ", " + ")";
PreparedStatement statement = connection.prepareStatement(sql);
方法三:(推荐)
使用占位符来替换,能够有效的避免出现SQL的注入攻击,也会更严格的进行校验语句是否正确
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
String id = scanner.next();
String sex = scanner.next();
String sql = "insert into employee values(?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,name);//替换第一个占位符
statement.setString(2,id);//替换第二个占位符
statement.setString(3,sex);//替换第三个占位符
int n = statement.executeUpdate();//对于数据库的增,删,改可以使用此语句
//使用一个整数来接受返回值,含义为对于数据库所影响的数据行数
ResultSet resultSet = preparedStatement.executeQuery();//对于查询sql语句使用
//并使用ResultSet来接收返回值,含义为select得到的所有数据行
while(resultSet.next()){//每一次while循环以一行数据为单位,直到所有都打印完
String name = resultSet.getString("name");
String id = resultSet.getString("id");
String sex = resultSet.getString("sex");
System.out.println(name + " " + id + " " + " " + sex);
}
使用了什么就释放什么,并按照相反的使用顺序
resultSet.close();//只有查询语句并使用了ResultSet来接收executeQuery()才需要释放
preparedStatement.close();//释放预处理
connection.close();//释放连接
增添,删除和更新数据的语句格式很类似,只有sql语句的区别
public static void main(String[] args) throws SQLException {
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
String id = scanner.next();
String sex = scanner.next();
//创建数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("021228");
//和数据库建立连接
Connection connection = dataSource.getConnection();
//构造sql语句
String sql = "insert into employee values(?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,name);
statement.setString(2,id);
statement.setString(3,sex);
System.out.println(statement);
//执行sql语句
int n = statement.executeUpdate();
//释放资源,关闭连接
statement.close();
connection.close();
}
查询数据
public static void main(String[] args) throws SQLException {
//创建数据源
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("021228");
//建立连接
Connection connection = dataSource.getConnection();
//构造sql语句
String sql = "select * from employee";
//预处理sql语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);
System.out.println(sql);
//执行sql语句
ResultSet resultSet = preparedStatement.executeQuery();
while(resultSet.next()){//每一次while循环以一行数据为单位
String name = resultSet.getString("name");
String id = resultSet.getString("id");
String sex = resultSet.getString("sex");
System.out.println(name + " " + id + " " + " " + sex);
}
//释放资源
resultSet.close();
preparedStatement.close();
connection.close();
}