相信不少小白和我一样开始了Java操作数据库的学习,小编在数据库上也缺少不少的练习,所有小编将会前面讲内容,后文练习的形式来总结小编对数据库的复习。好了废话不多说,下面就开始练习吧!
目录
什么是JDBC?
Java相关的数据库类库在哪里?
jdbc本质
厂商开发的实现类被称为驱动 :( MySQL的架包被称为MySQL的驱动)
体现接口作用(***重点):
使用JDBC?
准备工作
JDBC编程六步(很重要,背!!)
注册驱动(通知Java程序知道,链接的是哪一个品牌数据库)
获取数据库链接(Java进程与MySQL进程链接的通道开启)
方式二(推荐使用)
获取数据库操作对象(用这个对象来执行sql语句)
执行sql操作命令(执行sql语句)
处理查询结果集(如果是查询语句,就执行查询结果集,不是就没有)
释放资源 (关闭所有的资源,JDBC是进程之间的通信,占资源比较大)
使用配置文件操作数据库
优点:
JDBC:Java Databsase Connectivity
使用Java链接数据库的一套接口(就是在Java程序中写sql语句,对数据库中数据做CRUD“增删查改”,架包不需要解压)
java.sql.*;
这个包下都是jdbc的接口,由SUN公司制定的(程序员就不需要关心底层实现,会使用就行)
jdbc实际上是SUN公司制定好的对于数据库的接口,全部都interface接口,MySQL与Orcale等其他数据库来对JDNBC来实现(每个数据库实现JDBC方法原理都不一样,由厂家自己进行实现),降低了耦合度(耦合度:就是程序的关联关系)
把使用接口的人和实现接口的人分开,实现接口的人不必要关心谁去使用,而使用接口的人也不用关心实现的细节
1,在网上下载数据库的JDBC包(每个数据库厂商都有自己的驱动)
2,类加载器配置路径(类加载器能够找到厂商实现的.class文件)
配置环境变量:桌面上此电脑——>右击鼠标——>属性——>高级系统配置——>环境变量
classpath没有配置,默认从当前路径下加载
classpath配置 例如 D: \abc,则固定从d盘下abc文件下查找
. ; D: \abc (路径)
这样配置就可以下在当前文件夹路径下查找,没有再到d: \abc文件夹下查找
idea下用配置:
在创建的文件夹下创建一个空文件(名命为lib),数据库架包复制到文件夹中
加入架包
就完成了。
package com.luosf.jdbc;
import java.sql.*;
import java.util.Properties;
public class JdbcTest {
void testconn1() throws SQLException {
try{
//创建驱动
Driver driver = new com.mysql.jdbc.Driver();
}catch (SQLException e){
e.printStackTrace();
}
}
}
package com.luosf.jdbc;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.sql.*;
import java.util.Properties;
public class JdbcTest {
public static void main(String[] args) throws SQLException {
testconn1();
}
static void testconn1() throws SQLException {
try{
//创建驱动
Driver driver = new com.mysql.jdbc.Driver();
//存储数据库网络协议“ldbc:数据库名称://IP地址或者域名 :端口 / 数据库名称”
//charset 指定编码,可填可不填。“&”符号分隔开
String url = "jdbc:mysql://127.0.0.1:3333/db_nhjc?charset=utf-8";
//链接数据库
Properties info = new Properties();
//参数设置
info.setProperty("user","root");//登录MySQL数据库用户名
info.setProperty("password","root");//登录MySQL数据库密码
//如果数据库是8.0,必须是8.0以上的驱动
//8.0以上的驱动必须设置时区参数
info.setProperty("serverTimeZone","Asia/Shanghai");
//登录数据库
Connection connection = driver.connect(url,info);
//查看数据库是否链接成功
System.out.println(connection);
}catch (SQLException e){
e.printStackTrace();
}
}
}
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取链接 ,参数 : jdbc 登录用户名称 密码
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3333/db_nhjc?charset=utf-8","root","root");
//获取数据库操作对象
stmt = conn.createStatement();
//获取数据库操作对象
stmt = conn.createStatement();
//执行SQL语句
String sql = "select * from t_shuihuo";
rs = stmt.executeQuery(sql);
//处理查询结果集
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String nickname = rs.getString("nickname");
System.out.println("id :"+ id + "name :" +name + "昵称 :"+nickname);
}
finally {
//释放资源
try {
rs.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
全部代码展示(添加使用下面方式:创建驱动):
package com.luosf.jdbc;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.sql.*;
import java.util.Properties;
public class JdbcTest {
public static void main(String[] args) throws SQLException {
testconn1();
}
static void testconn1() throws SQLException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取链接 ,参数 : jdbc 登录用户名称 密码
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3333/db_nhjc?charset=utf-8","root","root");
//获取数据库操作对象
stmt = conn.createStatement();
//执行SQL语句
String sql = "select * from t_shuihuo";
rs = stmt.executeQuery(sql);
//处理查询结果集
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String nickname = rs.getString("nickname");
System.out.println("id :"+ id + "name :" +name + "昵称 :"+nickname);
}
}catch (ClassNotFoundException e){
e.printStackTrace();
}finally {
//释放资源
try {
rs.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
}
}
现象:
在Src文件夹下创建一个新包(resources),在包下创建File命名为db.properties 配置文件,在文件夹下创建数据库配置信息。
**********配置MySQL的属性文件*************
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3333/db_nhjc?charset=utf-8
user = root
password = root
通过资源绑定器获取属性(绑定的文件夹名称不要错了哦)
package com.luosf.jdbc;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.sql.*;
import java.util.Properties;
import java.util.ResourceBundle;
public class JdbcTest {
public static void main(String[] args) throws SQLException {
testconn1();
}
static void testconn1() throws SQLException {
//设置资源绑定器
ResourceBundle bundle = ResourceBundle.getBundle("resources/db");
//通过属性配置文件拿到信息
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
//注册驱动
Class.forName(driver);
//获取链接 ,参数 : jdbc 登录用户名称 密码
conn = DriverManager.getConnection(url,user,password);
//获取数据库操作对象
stmt = conn.createStatement();
//执行SQL语句
String sql = "select * from t_shuihuo";
rs = stmt.executeQuery(sql);
//处理查询结果集
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String nickname = rs.getString("nickname");
System.out.println("id :"+ id + "name :" +name + "昵称 :"+nickname);
}
}catch (ClassNotFoundException e){
e.printStackTrace();
}finally {
//释放资源
try {
rs.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
}catch (SQLException e ){
e.printStackTrace();
}
}
}
}
现象:
当代码过于多时,我们就可以实现改一先配置文件就能更改数据库的操作,让代码更加简洁,操作更加方便。