JDBC:java连接MySQL数据库
首先,java连接MySQl数据库之前需要安装对应的驱动jar:
-
需要导入驱动jar包 mysql-connector-java-8.0.22.jar
1.1–复制mysql-connector-java-8.0.22.jar到项目下。 注:任何一个包都可以,也可以自己建一个包。
1.2–右键——>add as Library
-
注册驱动
-
获取数据库连接对象 Connection
-
定义sql
-
获取执行sql语句的对象 Statement
-
执行sql,接受返回结果
-
处理结果
-
释放资源
示例代码:(函数都在Test类中)
获取连接
//导入对应的包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Test{
//连接数据库,封装成函数方便调用
public static Connection getconn(){
Connection conn=null; //获取数据库连接对象
String user="root";//MySQL用户名
String password="";//密码
//mysql数据库的url supermarket为数据库名
String url="jdbc:mysql://localhost:3306/supermarket";
//由于调用包,可能会出现异常,所以放在try/catch块里面
try{
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");//mysql对应的驱动
//获取数据库连接对象
coon =DriverN=Manager.getConnection(url,user,password);
} catch (SQLException e){ //获取执行sql语句的异常
e.printStackTrace();//打印异常信息
} catch (ClassNotFoundException e){
e.printStackTrace();
}
return conn;//返回数据库连接对象
}
}
执行SQL语句
其中,Goods为数据表,有gid, gname, gprice, gnum列。
执行增加,更新类sql语句:
int rs=pstmt.executeUpdate(); 返回结果为整数,rs>0(执行成功)
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public boolean addGoods(Goods goods){
boolean bool=false;
conn=Test.getconn();//链接数据库
String sql="INSERT INTO GOODS (GNAME,GPRICE,GNUM) VALUES (?,?,?)";
try{
pstmt=conn.prepareStatement(sql);//准备sql语句
pstmt.setString(1,goods.getGname());//向第一个?设置值
pstmt.setDouble(2,goods.getGprice());
pstmt.setInt(3,goods.getGnum());
//执行增加,更新类sql语句, 返回结果为整数,rs>0,执行成功
int rs=pstmt.executeUpdate();
if (rs > 0){
bool = true;
}
} catch (SQLException e){
e.printStackTrace();
} finally {
DbClose.addClose(pstmt,conn);//关闭连接
}
return bool;
}
执行查询类sql语句:
执行:pstmt.executeQuery(); 返回对象
public ArrayList<Goods> displayGoods(){
ArrayList<Goods> goodsList = new ArrayList<Goods>();
conn = DbConn.getconn();
String sql = "SELECT * FROM GOODS";
try{
pstmt = conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while (rs.next()){
int gid = rs.getInt(1);
String gname = rs.getString(2);
double gprice = rs.getDouble("gprice"); //双引号+主键名,也可用数字表示.
int gnum = rs.getInt(4);
Goods goods = new Goods(gid,gname,gprice,gnum); //创建Goods对象,并赋值.
goodsList.add(goods);
}
} catch (SQLException e){
e.printStackTrace();
} finally {
DbClose.queryClose(pstmt,rs,conn);
}
return goodsList;
}
关闭连接
public static void addClose(PreparedStatement pstmt, Connection conn){
//多个 try-catch 出发点:安全
try{
if(pstmt!=null){
pstmt.close();
}
} catch (SQLException e1){
e1.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e){
e.printStackTrace();
}
}
public static void queryClose(PreparedStatement pstmt, ResultSet rs,Connection conn){
//ResultSet rs 结果集(ResultSet)是数据中查询结果返回的一种对象
try{
if(pstmt!=null){
pstmt.close();
}
} catch (SQLException e1){
e1.printStackTrace();
}
try{
if(rs!=null){
rs.close();
}
} catch (SQLException e){
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e){
e.printStackTrace();
}
}
测试代码:
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBC_demo {
static {
// 加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 连接数据库
public static Connection getConn() {
Connection conn = null;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/supermarket?useUnicode=true&characterEncoding=utf8", "root", "");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) {
System.out.println("连接+" + JDBC_demo.getConn());
;
}
}