JDBC(Java DataBase Connectivity) Java数据库连接
其实就是利用Java语言/程序连接并访问数据库的一门技术
之前我们可以通过cmd或者SQLyog等工具连接操作数据库
但在企业开发中,更多的是通过程序(Java程序)连接并访问数据库,通过Java程序访问数据库,就需要用到JDBC这门技术。
第一步: 首先我们在mysql数据库中准备一下我们需要操作的数据:
create database jt_db charset utf8;
use jt_db;
create table account(
id int primary key auto_increment,
name varchar(50),
money double
);
insert into account values(null, ‘tom’, 1000);
insert into account values(null, ‘andy’, 1000);
insert into account values(null, ‘tony’, 1000);
我们在数据库中创建jt_db数据库并创建account表并插入数据。
2.第二步:导入mysql驱动包
如上图,在java工程中创建一个Folder,命名为lib,在网上找到mysql-connector-java-5.1.32.jar压缩包后,将其粘贴到 lib 中。
之后,我们右击mysql-connector-java-5.1.32.jar压缩包,选中buildpath->add to build path
如上图,我们就会发现我们的Referenced Libraries 中有一个奶瓶状标识的jar包了。
第3步:创建类并实现jdbc程序(六个步骤):
1.注册数据库驱动
*2.获取数据库连接
*3.获取传输器
*4.通过传输器发送SQL到服务器,并返回执行结果
*5.输出结果(将每一行记录输出到控制台上)
*6.稀释资源
*
注意:我的mysql数据库账号和密码都是root,端口也是3306
代码如下:
public static void main(String[] args) throws Exception {
/**
* *1.注册数据库驱动(参数是Driver类的权限定类名)
*/
try {
Class.forName("com.mysql.jdbc.Driver");//反射Driver类,使其运行,其中的静态代码块注册
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* *2.获取数据连接:(三个参数,连接数据库的url,数据库的用户名,密码)
*/
Connection conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8","root","root");
/**
* *3.获取传输
*/
Statement stat=conn.createStatement();//Statement传输器
/**
* *4.通过传输器发送SQL到服务器,并返回执行结果
*/
String sql="select * from account ";
//将 sql语句传到数据库
ResultSet rs=stat.executeQuery(sql);//executeQuery用于执行查询类型的SQL语句
/**
* *5.输出结果(将每一行记录输出到控制台上)
*/
// rs.next();//让箭头向下挪动一行,返回布尔值
// rs.getInt("id");
// rs.getString("name");
// rs.getDouble("money");
System.out.println("id\t"+"name\t"+"money\t");
while(rs.next()) {
int id=rs.getInt("id");
String name=rs.getString("name");
double money=rs.getDouble("money");
System.out.println(id+"\t"+name+"\t"+money+"\t");
}
/**
* *6.稀释资源
*/
rs.close();
stat.close();
conn.close();
//syst alt+/
System.out.println("TertJDBC01.main()");
}
执行结果如下:
我们不难发现,JDBC连接步骤中的第一步注册驱动和第二步获取数据库连接他们的格式都是恒定的(除了URL,数据库账号和密码这些参数外)
所以,为了以后的使用方便,我们可以将第一步和第二步封装到一个类方法中去,到以后使用是,我们只需调用这个类的方法就可以直接获取到连接了。
方法如下:
如图,我们在当前工程下新建个包,在包中新建一个生成连接的类
这之后,我们在类中可写两个方法:
一个无参的getConn()方法和一个有参的getConn()方法
无参的方法中我们默认url,账号和密码已经确定,这是为了调用方法方便,在有参的方法中我们主要是为了当我们的url,账号或密码有所变动时,便于修改。(只要改变参数即可)
public class jdbcUtil {
//获取连接的方法
public static Connection getConn(){
try {
Class.forName("com.mysql.jdbc.Driver");
//获取连接:
String url="jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8";
String user="root";
String pwd="root";
Connection conn=DriverManager.getConnection(url,user,pwd);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取数据库连接对象
* @param dbName 连接数据库的名字
* @param user 连接数据可的用户名
* @param pwd 连接的数据库的密码
* @return Connection连接对象
*/
public static Connection getConn(String dbName,String user,String pwd){
try {
Class.forName("com.mysql.jdbc.Driver");
//获取连接:
String url="jdbc:mysql://localhost:3306/"+dbName+"?characterEncoding=utf-8";
Connection conn=DriverManager.getConnection(url,user,pwd);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
在我们将连接方法封装后,调用它就方便啦。
我们在第四步开头,我们用java连接数据库后只对其进行了查询操作,(executeQuery()函数,返回值是数据库中的数据集合),然而,我们对数据库的增,删,改操作却需要用另一个函数(executeUpdate()函数,返回值是操作影响的数据行数)。
@Test
public void testInsert() throws Exception {
//新增:
Class.forName("com.mysql.jdbc.Driver");
//获取连接:
String url="jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8";
String user="root";
String pwd="root";
Connection conn=DriverManager.getConnection(url,user,pwd);
//获取传输器:
Statement stat=conn.createStatement();
//执行sql,返回结果
String sql = "insert into account value(null,'john',3500)";
int rows=stat.executeUpdate(sql);//返回行数
//输出结果
System.out.println("影响行数:"+rows);
//释放资源
stat.close();
conn.close();
}
删除操作:
@Test
public void testDelete() throws Exception {
//删除:
Connection conn=jdbcUtil.getConn();
Statement stat=conn.createStatement();
String sql ="delete from account where id=4";
int rows=stat.executeUpdate(sql);
System.out.println("影响行数:"+rows);
//释放资源
stat.close();
conn.close();
}
更改操作:
@Test
public void testUpdate() throws Exception {
//修改:
Connection conn=jdbcUtil.getConn();
Statement stat=conn.createStatement();
String sql ="update account set money=1500 where name='john'";
int rows=stat.executeUpdate(sql);
System.out.println("影响行数:"+rows);
//释放资源
stat.close();
conn.close();
}
查询操作:
@Test
public void testSelect() throws Exception{
Connection conn=jdbcUtil.getConn("jt_db","root", "root");
Statement stat=conn.createStatement();
String sql="select * from account";
ResultSet rs=stat.executeQuery(sql);
System.out.println("id\t"+"name\t"+"money\t");
while(rs.next()) {
int id=rs.getInt("id");
String name=rs.getString("name");
double money=rs.getDouble("money");
System.out.println(id+"\t"+name+"\t"+money+"\t");
}
rs.close();
stat.close();
conn.close();
}