JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
Jdbc作用就是访问数据库。
首先我们知道我们是通过java程序去访问MySQL数据库的,java程序它只认识java对象;
其次被我们通过java程序所访问的数据库是关系型数据库MySQL,关系型数据库它只认识SQL语句;
那么我们的Java对象怎么要被转换成数据库所能认识的sql语句,以及数据库执行执行完成一个sql语句之后的结果,又怎么被转换成java对象,被java程序包识别???
这时我们就要去下载一个数据库驱动程序,这个数据库驱动程序可以帮助我们连接数据库,将java对象转换成sql语句由数据库去执行,并将数据库的执行结果,转成java对象,供我们的java程序使用。
说白了就是我们想要使用java程序访问mysql数据库,还需要下载一个mysql数据驱动程序。
Jdbc访问数据库需要的元素
1.数据库驱动程序【数据库驱动包】–自己下载
https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.38
您要连接什么数据库,那么你就下载什么数据库的驱动。
2.java反射机制【Class.forname(classname)】–加载数据库驱动
3.java.sql.Connection接口
[与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。]
如何得到Connection接口
4.java.sql.DriverManager类[管理一组 JDBC 驱动程序的基本服务]
static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
url - jdbc:subprotocol:subname 形式的数据库 url[数据库位置]
user - 数据库用户,连接是为该用户建立的
password - 用户的密码
5.java.sql.Statement接口 [用于执行静态 SQL 语句并返回它所生成结果的对象]
如何得到Statement接口对象:
通过Connection接口得到Statement接口对象
6.java.sql.PreparedStatement接口【SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。】
如何得到PreparedStatement接口对象:
通过Connection接口得到Statement接口对象
PreparedStatement prepareStatement(String sql)throws SQLException创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库
7.java.sql.ResultSet[表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。]
Object getXXXXXX(int columnIndex)
columnIndex - 第一个列是 1,第二个列是 2,……
Object getXXXXXX(String columnLabel)
columnLabel- 列名
boolean next()将光标从当前位置向前移一行。
JDBC访问数据库实例
1.下载数据库驱动包“mysql-connector-java-5.1.38.jar”
2.打开数据库创建保存数据的数据表
–创建数据库表
create table t_person(
per_id int primary key auto_increment,
per_name varchar(20),
per_age int,
per_sex bit,
per_address varchar(30)
);
3.创建一个普通的java工程
4.导入数据库驱动包到java工程
1.在java工程下创建一个“lib”文件夹,将下载好的数据库驱动赋值到lib文件夹中
2.选中工程—右键–Bulid Path–Configure Bulid Path–Libraries–Add Jars…–自己工程—lib–数据库驱动包—选中—OK
5.参照数据库表创建保存数据的java类
package com.click369.bean;
import java.io.Serializable;
/**
* 保存个人信息的java类
* @author Administrator
*
*/
@SuppressWarnings("serial")
public class Person implements Serializable{
private int perid;
private String pername;
private int perage;
private boolean persex;
private String peraddress;
public int getPerid() {
return perid;
}
public void setPerid(int perid) {
this.perid = perid;
}
public String getPername() {
return pername;
}
public void setPername(String pername) {
this.pername = pername;
}
public int getPerage() {
return perage;
}
public void setPerage(int perage) {
this.perage = perage;
}
public boolean isPersex() {
return persex;
}
public void setPersex(boolean persex) {
this.persex = persex;
}
public String getPeraddress() {
return peraddress;
}
public void setPeraddress(String peraddress) {
this.peraddress = peraddress;
}
}
6.加载数据库驱动得到数据库连接
package com.click369.db;
/**
* 数据库连接的管理类
* 1.加载数据库驱动
* 2.得到数据库连接
* @author Administrator
*
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection{
//定义数据库驱动名称
private static final String DRIVERNAME="com.mysql.jdbc.Driver";
//定义连接数据库的url
private static final String URL="jdbc:mysql://127.0.0.1:3306/mydb1";
//定义数据库访问用户名
private static final String USERNAME="root";
//定义访问数据库的密码
private static final String PASSWORD="123456";
//加载数据库驱动
//1.构造方法加载数据库驱动
/*
public DBConnection(){
//通过反射机制加载数据库驱动
try {
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
*/
//2.通过静态代码块加载驱动
static{
//通过反射机制加载数据库驱动
try {
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 得到数据库连接
*/
public static Connection getMyConnection(){
//定义数据库连接对象
Connection conn=null;
//得到数据库连接
try {
conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
7.用Statement完成具体的增删改查操作
package com.click369.dbao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.click369.bean.Person;
import com.click369.db.DBConnection;
/**
* 用Statement完成具体的增删改查操作
* @author Administrator
*
*/
public class StatementPerson {
/**
* 完成Person数据的添加
* @param person
* @return
* @throws Exception
*/
public boolean insertPerson(Person person)throws Exception{
boolean flag=false;
Connection conn=null;
Statement statement=null;
conn=DBConnection.getMyConnection();
statement= conn.createStatement();
String insertsql="insert into t_person values(null,'"+person.getPername() +"',"+person.getPerage()+","+person.isPersex()+",'"+person.getPeraddress()+"');";
System.out.println(insertsql);
if(statement.executeUpdate(insertsql) > 0) flag=true;
statement.close();
conn.close();
return flag;
}
/**
* 完成Person数据的修改
* @param person
* @return
* @throws Exception
*/
public boolean updatePerson(Person person)throws Exception{
boolean flag=false;
Connection conn=null;
Statement statement=null;
conn=DBConnection.getMyConnection();
statement= conn.createStatement();
StringBuilder updatesql=new StringBuilder();
updatesql.append("update t_person set per_name='"+person.getPername()+"',");
updatesql.append("per_age="+person.getPerage()+",");
updatesql.append("per_sex="+person.isPersex()+",");
updatesql.append("per_address='"+person.getPeraddress()+"' ");
updatesql.append("where per_id="+person.getPerid()+";");
System.out.println(updatesql.toString());
if(statement.executeUpdate(updatesql.toString()) > 0) flag=true;
statement.close();
conn.close();
return flag;
}
/**
* 完成Person数据的删除
* @param person
* @return
* @throws Exception
*/
public boolean deletePerson(int perid)throws Exception{
boolean flag=false;
Connection conn=null;
Statement statement=null;
conn=DBConnection.getMyConnection();
statement= conn.createStatement();
String deletesql="delete from t_person where per_id="+perid+";";
System.out.println(deletesql);
if(statement.executeUpdate(deletesql) > 0) flag=true;
statement.close();
conn.close();
return flag;
}
/**
* 完成Person数据的查询所有
* @param person
* @return
* @throws Exception
*/
public List<Person> selectPerson()throws Exception{
List<Person> personList=null;
Connection conn=null;
Statement statement=null;
ResultSet resultSet=null;
conn=DBConnection.getMyConnection();
statement= conn.createStatement();
String selectsql="select * from t_person;";
System.out.println(selectsql);
resultSet=statement.executeQuery(selectsql);
personList=new ArrayList<Person>();
while(resultSet.next()){
//得到每一行中每一个列的具体数据值
int perid=resultSet.getInt("per_id");
String pername=resultSet.getString("per_name");
int perage=resultSet.getInt("per_age");
boolean persex= resultSet.getBoolean("per_sex");
String peraddress=resultSet.getString("per_address");
//将得到的每一列数据保存java对象
Person person=new Person();
person.setPerid(perid);
person.setPername(pername);
person.setPerage(perage);
person.setPersex(persex);
person.setPeraddress(peraddress);
//将保存有数据的java对象添加到集合中
personList.add(person);
}
resultSet.close();
statement.close();
conn.close();
return personList;
}
/**
* 完成Person数据根据id查询的操作
* @param person
* @return
* @throws Exception
*/
public Person selectPersonById(int perid)throws Exception{
Person person=null;
Connection conn=null;
Statement statement=null;
ResultSet resultSet=null;
conn=DBConnection.getMyConnection();
statement= conn.createStatement();
String selectsqlbyid="select * from t_person where per_id="+perid+";";
System.out.println(selectsqlbyid);
resultSet=statement.executeQuery(selectsqlbyid);
if(resultSet.next()){
//得到一行中每一个列的具体数据值
int perid1=resultSet.getInt("per_id");
String pername=resultSet.getString("per_name");
int perage=resultSet.getInt("per_age");
boolean persex= resultSet.getBoolean("per_sex");
String peraddress=resultSet.getString("per_address");
//将得到的每一列数据保存java对象
person=new Person();
person.setPerid(perid1);
person.setPername(pername);
person.setPerage(perage);
person.setPersex(persex);
person.setPeraddress(peraddress);
}
resultSet.close();
statement.close();
conn.close();
return person;
}
}
8.用PreparedStatement完成具体的增删改查操作
package com.click369.dbao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.click369.bean.Person;
import com.click369.db.DBConnection;
/**
* 8.用PreparedStatement完成具体的增删改查操作
* @author Administrator
*
*/
public class PreparedStatementPerson {
/**
* 添加Person信息
* @param person
* @return
* @throws Exception
*/
public boolean insertPerson(Person person)throws Exception{
boolean flag=false;
Connection conn=null;
PreparedStatement ps=null;
conn=DBConnection.getMyConnection();
String insertsql="insert into t_person values(null,?,?,?,?);";
ps=conn.prepareStatement(insertsql);
//为占位符“?”传递数据值
ps.setString(1,person.getPername());
ps.setInt(2,person.getPerage());
ps.setBoolean(3,person.isPersex());
ps.setString(4,person.getPeraddress());
if(ps.executeUpdate() > 0) flag=true;
ps.close();
conn.close();
return flag;
}
/**
* 修改Person信息
* @param person
* @return
* @throws Exception
*/
public boolean updatePerson(Person person)throws Exception{
boolean flag=false;
Connection conn=null;
PreparedStatement ps=null;
conn=DBConnection.getMyConnection();
String updatesql="update t_person set per_name=?,per_age=?,per_sex=?,per_address=? where per_id=?";
ps=conn.prepareStatement(updatesql);
//为占位符“?”传递数据值
ps.setString(1,person.getPername());
ps.setInt(2,person.getPerage());
ps.setBoolean(3,person.isPersex());
ps.setString(4,person.getPeraddress());
ps.setInt(5,person.getPerid());
if(ps.executeUpdate() > 0) flag=true;
ps.close();
conn.close();
return flag;
}
/**
* 删除Person信息
* @param person
* @return
* @throws Exception
*/
public boolean deletePerson(int perid)throws Exception{
boolean flag=false;
Connection conn=null;
PreparedStatement ps=null;
conn=DBConnection.getMyConnection();
String deletesql="delete from t_person where per_id=?";
ps=conn.prepareStatement(deletesql);
//为占位符“?”传递数据值
ps.setInt(1,perid);
if(ps.executeUpdate() > 0) flag=true;
ps.close();
conn.close();
return flag;
}
/**
* 查询所有Person信息
* @param person
* @return
* @throws Exception
*/
public List<Person> selectPerson()throws Exception{
List<Person> personlist=null;
Connection conn=null;
PreparedStatement ps=null;
ResultSet resultSet=null;
conn=DBConnection.getMyConnection();
String deletesql="select * from t_person;";
ps=conn.prepareStatement(deletesql);
resultSet=ps.executeQuery();
personlist=new ArrayList<Person>();
while(resultSet.next()){
Person person=new Person();
person.setPerid( resultSet.getInt("per_id"));
person.setPername(resultSet.getString("per_name"));
person.setPerage(resultSet.getInt("per_age"));
person.setPersex(resultSet.getBoolean("per_sex"));
person.setPeraddress(resultSet.getString("per_address"));
personlist.add(person);
}
resultSet.close();
ps.close();
conn.close();
return personlist;
}
/**
* 查询一个Person信息
* @param person
* @return
* @throws Exception
*/
public Person selectPersonById(int perid)throws Exception{
Person person=null;
Connection conn=null;
PreparedStatement ps=null;
ResultSet resultSet=null;
conn=DBConnection.getMyConnection();
String deletesql="select * from t_person where per_id=?;";
ps=conn.prepareStatement(deletesql);
ps.setInt(1,perid);
resultSet=ps.executeQuery();
if(resultSet.next()){
person=new Person();
person.setPerid( resultSet.getInt("per_id"));
person.setPername(resultSet.getString("per_name"));
person.setPerage(resultSet.getInt("per_age"));
person.setPersex(resultSet.getBoolean("per_sex"));
person.setPeraddress(resultSet.getString("per_address"));
}
resultSet.close();
ps.close();
conn.close();
return person;
}
}
9.单元测试【junit】
package com.click369.test;
import org.junit.Test;
import com.click369.bean.Person;
import com.click369.dbao.PreparedStatementPerson;
/**
* 通过Junit单元测试
* 1.下载Junit单元测试包
* 2.导入工程
* @author Administrator
*/
public class TestClass {
@Test
public void insert()throws Exception{
PreparedStatementPerson psperson=new PreparedStatementPerson();
Person person=new Person();
person.setPername("lisi");
person.setPerage(24);
person.setPersex(false);
person.setPeraddress("北京");
System.out.println( psperson.insertPerson(person));
//psperson.insertPerson(person);
}