JDBC连接过程:
1.导入相关的JDBC驱动jar包;
①:新建一个文件夹,命名为lib;
②:将jar包粘贴至此文件夹;
③:右键jar包,Add to Build Path;
④:完成。
2.注册驱动,把mysql的Driver对象注册到java.sql.Drivermanager中;
Class.forName("com.mysql.jdbc.Driver");
3.建立连接;
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
4.SQL业务操作;
首先简单介绍一下连接的数据库book:
只有两个表:user和bookmessage。
①:user
②:bookmessage
uid为外键,下面的业务操作只用到表bookmessage。
①:Statement;
(1)查询操作:
Statement stmt = null;
ResultSet rs = null;
List<book> list = new ArrayList<book>();
String sql ="select * from bookmessage";
rs = stmt.executeQuery(sql);//查询
while(rs.next()) {
int bid = rs.getInt(1);//bid数据类型为int
String name = rs.getString(2);//bookname数据类型为String
int uid = rs.getInt(3);//uid数据类型为int
//System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3));直接打印表的信息;
book b = new book(bid,name,uid);//构建book类打印表的信息
list.add(b);//加入book类list
}
//打印
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).getBid()+"\t"+list.get(i).getBookname()+"\t\t"+list.get(i).getUid());
}
book类:
package JDBC;
public class book {
private int bid;
private String bookname;
private int uid;
public book() {
}
public book(int bid,String bookname,int uid) {
this.bid = bid;
this.bookname = bookname;
this.uid = uid;
}
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
}
(2)删除操作:
Statement stmt = null;
String sql ="delete from bookmessage where bid =6";
stmt = conn.createStatement();
int v = stmt.executeUpdate(sql);//添加 修改 删除时 返回受影响的行数;
if(v>0) {
System.out.println("success");
}else {
System.out.println("fail");
}
添加和修改就不一一进行演示了,接下来介绍PreparedStatement。
②:PreparedStatement。
PreparedStatement有预编译功能,可以防止sql注入,安全性更高。
举一个添加的例子:
String sql ="insert into bookmessage values(?,?,?)";
int bid = 7;
String bookname ="林清玄散文精选";
int uid = 3;
pstmt = conn.prepareStatement(sql);
//给定参数位置从左到右依次为1,2,3,4 ~~
pstmt.setInt(1,bid);//第一个?处设置参数bid
pstmt.setString(2,bookname);//第二个?处设置参数bookname
pstmt.setInt(3,uid);//第三个?处设置参数uid
int v = pstmt.executeUpdate();
if(v>0) {
System.out.println("success");
}else {
System.out.println("fail");
}
5.关闭资源。
执行完sql业务后,关闭使用的资源,要进行判空。
if(null != rs) {
rs.close();
}
if(null != stmt) {
stmt.close();
}
if(null != pstmt) {
pstmt.close();
}
if(null != conn) {
conn.close();
}
JDBC封装:
既然我们了解了JDBC连接的过程,那么我们大致可以将其分为三个部分:sql业务操作前为第一部分,准备部分,需要进行注册和连接;sql业务操作为第二部分;最后一部分为关闭资源。那么除第二部分sql业务操作外,其余两部分可以封装在一个工具类中。
第一部分,准备:
注册驱动可以放在静态块中,进行类的初始化:
static {
try {
Class.forName(DRIVERPATH);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
获取Connection对象:
public static Connection getConn() {
synchronized(DBconUtil.class) {
try {
if(null == conn || conn.isClosed()) {
synchronized(DBconUtil.class) {
conn = DriverManager.getConnection(URL,USER,PASSWORD);
}
}
}catch(SQLException e) {
e.printStackTrace();
}
}
return conn;
}
关闭资源:
用stmt可以把pstmt的位置填null,用pstmt可以把stmt的位置填null。
public static void close(Connection con,PreparedStatement pstmt,Statement stmt,ResultSet rs) {
try {
if(null != rs) {
rs.close();
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(null != stmt) {
stmt.close();
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(null != pstmt) {
pstmt.close();
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
//关闭资源
try {
if(null != conn) {
conn.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
}
DBconUtil类:
最后附上封装类,整理不易。
package JDBC;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBconUtil {
private static final String URL = "jdbc:mysql://127.0.0.1:3306/book";
private static final String USER = "root";
private static final String PASSWORD = "123456";
private static final String DRIVERPATH = "com.mysql.jdbc.Driver";
private static Connection conn = null;
Statement stmt = null;
static {
try {
Class.forName(DRIVERPATH);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConn() {
synchronized(DBconUtil.class) {
try {
if(null == conn || conn.isClosed()) {
synchronized(DBconUtil.class) {
conn = DriverManager.getConnection(URL,USER,PASSWORD);
}
}
}catch(SQLException e) {
e.printStackTrace();
}
}
return conn;
}
public static void close(Connection con,PreparedStatement pstmt,Statement stmt,ResultSet rs) {
try {
if(null != rs) {
rs.close();
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(null != stmt) {
stmt.close();
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(null != pstmt) {
pstmt.close();
}
}catch(SQLException e) {
e.printStackTrace();
}finally {
//关闭资源
try {
if(null != conn) {
conn.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
转载:https://blog.csdn.net/weixin_43912621/article/details/106871762
查看评论