import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/**
* 数据库连接工具类
*
* @author xiao
*/
public class DBUtil {
/**
* 连接对象
*/
private Connection conn;
/**
* sql语句对象
*/
private PreparedStatement ps;
/**
* 结果集
*/
private ResultSet rs;
/**
* 4条连接信息
*/
private static String DRIVERNAME;
private static String URL;
private static String USER;
private static String PASSWORD;
/**
* 注册驱动
*/
static {
try {
// 读取属性文件,设置连接信息
Properties p = new Properties();
String path = DBUtil.class.getResource("").toString();
path = path.substring(path.indexOf("/") + 1);
System.out.println(path);
p.load(new FileReader(path + "db.properties"));
DRIVERNAME = (String) p.get("jdbc.driver");
URL = (String) p.get("jdbc.url");
USER = (String) p.get("jdbc.user");
PASSWORD = (String) p.get("jdbc.password");
// 注册驱动
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取连接
*/
public void getConnection(String sql,Object[] objs) {
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
ps=conn.prepareStatement(sql);
for (int j = 0; j < objs.length; j++) {
ps.setObject(j+1, objs[j]);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 断开连接
*/
public void close() {
try {
if (rs != null) {
rs.close();
}
if(ps!=null) {
ps.close();
}
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 增删改操作
*
* @return
*/
public int update(String sql,Object[] objs) {
int i=0;
getConnection(sql, objs);
try {
i=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
/**
* 查询操作
*/
public ResultSet query(String sql,Object[] objs) {
ResultSet rs=null;
getConnection(sql, objs);
try {
rs=ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
}
配合db.properties文件使用
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/school?serverTimezone=UTC
jdbc.user=root
jdbc.password=root
常用的API
常用包: Java.sql.*
常用类:
DriverManager 驱动管理器
Connection 连接
Statement sql语句对象
Statement存在漏洞,可以使用拼接的方法
(PreparedStatement extends Statement)
ResultSet 结果集
不同的数据库驱动不同!!
那么,驱动类名也不同:
Mysql5.X com.mysql.jdbc.Driver
Mysql8.X com.mysql.cj.jdbc.Driver
Oracle oracle.jdbc.driver.OracleDriver
Sql server com.microsoft.jdbc.sqlserver.SQLServerDriver
DB2 com.ibm.db2.jdbc.app.DB2Driver
那么,连接路径url不同:
Mysql5.X jdbc:mysql://主机:3306/数据库名 Mysql8.X
jdbc:mysql://主机:3306/数据库名?serverTimezone=UTC Oracle
jdbc:oracle:thin:@主机:1521:数据库名 Sql server
jdbc:microsoft:sqlserver://主机:1433;DatabaseName=数据库名 DB2
jdbc:db2://主机:5000/数据库名
rs.next()作用:
默认游标在集合的开始位置,第一行之前。 游标下移,然后判断游标指向的位置是否有一条记录,如果有返回true,如果没有返回false。