介绍:JDBC(Java DataBase Connectivity, Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用 Java语言编写的类和接口组成。
JDBC操作数据库类型: MySQL数据库
准备步骤:
① 你需要有MySQL数据库,然后在MySQL里面创建一个 home 数据库,在数据库里面新建一个 person 表。
② 在 person表中,新建字段 id(int 自增) ,name(character 类型),age(int 类型),chenghu(character 类型)
③ 在 Java / web 项目中导入 JDBC驱动jar包。最新: mysql-connector-java-8.0.11.jar 在网站上可以自行下载。
④ 导入方法:右击项目-> build path -> Add External Archives... 之后找到 mysql-connector-java-8.0.11.jar 文件 点击打开即可。
jdbc连接数据库步骤:
提示:JDBC 驱动jar包 在8.0版本以上的,和引入低版本的驱动jar包 在 创建驱动 和 建立URL、连接数据库 操作要写的java程序不一样。
1. 建立URL
//加载驱动
String URL="jdbc:mysql://127.0.0.1:3306/home?useSSL=false&serverTimezone=GMT%2B8";
代码格式: jdbc:数据库类型://所连数据库IP地址:默认端口号/数据库名?参数&参数
2. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
驱动的格式,跟低版本的 jar包要写的java格式不一样。
3. 连接数据库
Connection ct = DriverManager.getConnection(URL, USER, PASSWORD);
4. jdbc连接数据库的java封装
package jdbc;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import java.sql.Connection;
public class ConnDb {
private Connection conn = null;
private static Logger log=Logger.getLogger(ConnDb.class);
private Connection ct = null;
public Connection getConn(){
try {
//创建URL
String URL="jdbc:mysql://127.0.0.1:3306/home?useSSL=false&serverTimezone=GMT%2B8";
String USER="root";
String PASSWORD="123456";
//1.加载mysql驱动:
Class.forName("com.mysql.cj.jdbc.Driver");
//得到连接
ct = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return ct;
}
public Boolean dbclose() {
// TODO Auto-generated method stub
Boolean closeResult = false;
try {
if(!conn.isClosed()){
conn.close();
}
log.debug("数据库连接关闭成功");
closeResult=true;
} catch (SQLException e) {
// TODO: handle exception
log.error("数据库连接关闭失败");
log.error(e.getSQLState());//没有合适的驱动
log.error("错误信息为:"+e.getMessage());
closeResult=false;
}
return closeResult;
}
}
4. JDBC增删改查的jJava封装
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jdbc.ConnDb;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class personDao {
private ConnDb dbs;
private Connection conn;
private PreparedStatement pst = null;
public applicationtypeDao() {
super();
dbs = new ConnDb();
conn = dbs.getConn();
}
public JSONArray select() { // select 选取数据
JSONArray jsonArray = new JSONArray();
String sql = "select * from person;
ResultSet resultSet = null;
int col = 0;
try {
pst = conn.prepareStatement(sql);
resultSet = pst.executeQuery();
col = resultSet.getMetaData().getColumnCount();
while (resultSet.next()) {
JSONObject jsonObject = new JSONObject();
for (int i = 0; i < col; i++) {
// 得到列名
String columnLable = resultSet.getMetaData().getColumnLabel(i + 1);
// 得到列值
Object columnValue = resultSet.getObject(columnLable);
jsonObject.put(columnLable, columnValue);
}
jsonArray.add(jsonObject);
}
resultSet.close();
closedb(null);
} catch (SQLException e) {
// log.error("----记录更新失败----");
closedb(null);
}
return jsonArray;
}
public int update(int id, String name, int age,String shenfen) {
int rowsCount = 0; // 记录被更新的记录总数
String sql = "update person set name='" + name + "',age='" + age+
"',shenfen'"+shenfen+ "' where id ='" + id + "'";
try {
pst = conn.prepareStatement(sql);
rowsCount = pst.executeUpdate();
closedb(null);
} catch (SQLException e) {
closedb(e);
}
return rowsCount;
}
public boolean insert(int id, String name, int age, String shenfen) {
boolean rowsCount = false;
String sql = "insert into person(id,name,image,shenfen) values ('"+ id + "','"
+ name + "','" + age+"','" + shenfen +"')";
try {
pst = conn.prepareStatement(sql);
rowsCount = pst.execute();
closedb(null);
System.out.println("插入成功");
} catch (SQLException e) {
System.out.println("---插入记录失败!---");
closedb(e);
}
return rowsCount;
}
public int delete(int id) {
int rowsCount = 0;
String sql = "delete from person where id='" + id + "'";
PreparedStatement pst = null;
try {
pst = conn.prepareStatement(sql);
rowsCount = pst.executeUpdate();
System.out.println("删除记录成功:" + rowsCount);
pst.close();
conn.close();
} catch (SQLException e) {
System.out.println("删除记录失败");
try {
if (!pst.isClosed()) {
pst.close();
}
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e2) {
e2.printStackTrace();
}
}
return rowsCount;
}
private void closedb(SQLException e) {
try {
if (!pst.isClosed()) {
pst.close();
}
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException e2) {
}
}
}
5. 调用jdbc 增删改查 的方法实例实例
package main;
public class test {
public static void main(String args[]){
// 增
new personDao.insert("李晓明",18,"儿子");
new personDao.insert("李二小",38,"父亲");
new personDao.insert("王小红",18,"母亲");
new personDao.insert("李大白",18,"祖父");
// 删
new personDao.delete(1);
// 改
new personDao.update(1,"李小明改",20,"学生");
// 查
new personDao.select();
}
}
上面的代码实例,主要实现了对 jdbc 增删改查方法的类封装,方便调用方法。且每次调用“增删改查”功能后,内部自动执行关闭jdbc驱动的方法,消除了数据缓存的累积现象。