Java基础学习Day5,JDBC连接Mysql
JDBC连接Mysql步骤
1.加载驱动
2.创建连接
3.获取statement
4.执行sql
5.关闭连接
举例
这里我们先直接创建一个类,在这个类的主方法里直接完成以上5个步骤,实现JDBC连接Mysql,对数据进行调用。
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//加载驱动,其实就是通过反射创建了对象
Class.forName("com.mysql.cj.jdbc.Driver");
//mysql也可是sql server或者其他数据库
//java10是数据库的名字 localhost=127.0.0.1
//java11是数据库的名字
//useSSL=false表示不需要证书
//serverTimezone表示时区
String url="jdbc:mysql://localhost:3306/java11?useSSL=false&serverTimezone=Asia/Shanghai";
//登录数据库用户名
String username="root";
//登录数据库密码
String pwd="surfece2019DB";
//这行代码就是创建连接
Connection conn = DriverManager.getConnection(url,username,pwd);
//创建好连接后,就可以获取Statement,Statement里有“excute~”等方法,作用是实现sql,后文会详细讲解
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("select * from student");
while(rs.next()){
System.out.println("名字"+rs.getString("name"));
System.out.println("分数"+rs.getString("score"));
}
//切记要记得关闭连接
rs.close();
st.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
上面代码便是jdbc连接mysql的实现,但是从中不难发现,这段代码中有几个部分是可以重复使用的,因此,我们应该将其中的几个步骤封装起来,实现代码的复用。
代码封装
首先,分析上面的代码,我们可以看出1.加载驱动2.创建连接5.关闭连接这三个步骤都是固定不变的,在实际使用中,真正需要我们改变的是statement获取和sql语句的改变。因此,我们将1,3,5三个步骤放到一个类里面。
public class JDBCBasic {
public static Connection getConnection() {
Connection conn =null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/java11?useSSL=false&serverTimezone=Asia/Shanghai";
String username="root";
String pwd="surfece2019DB";
conn = DriverManager.getConnection(url,username,pwd);
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void closeConn(Statement st,ResultSet rs,Connection conn) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st!=null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if( conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
接下来,剩下的两个步骤,因为每次调用的期望结果不同,会使用不同的sql语句,主要是增、删、改、查四种。所以我们先创建一个类,其成员属性和我们期望的输出结果对应,在输出时调用。
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute,使用哪一个方法由 SQL 语句所产生的内容决定,具体使用方法见注释。(大多数情况:查询使用excuteQuery,删、改、增使用excuteUpdate)
public class Student {
private int id;
private String sex;
private String cname;
private String mobile;
private int score;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [id=" + id + ", sex=" + sex + ", cname=" + cname + ", mobile=" + mobile + ", score=" + score
+ ", name=" + name + "]";
}
}
接下来再创建一个类,在其中写方法,以实现我们期望的功能。以下例子里放了四个方法,分别对应了增、删、改、查四种sql语句。
public class StudentService {
//这个方法是将sql语句查询的结果放入上面创建好的类当中
public List<Student> getAllStudent(String sql){
List<Student> list=new ArrayList();
Connection conn=JDBCBasic.getConnection();
try {
Statement st=conn.createStatement();
//excuteQuery用于产生单个结果集的语句,例如 SELECT 语句。
//excuteUpdate用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
//execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。多数程序员不会需要该高级功能。
ResultSet rs=st.executeQuery(sql);
while(rs.next()) {
Student student=new Student();
student.setName(rs.getString("name"));
student.setId(rs.getInt("id"));
student.setScore(rs.getInt("score"));
student.setSex(rs.getString("sex"));
list.add(student);
}
//记得关闭连接
JDBCBasic.closeConn(st, rs, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
//这个方法是向表中添加数据
public Student add(Student student) {
Connection conn=JDBCBasic.getConnection();
try {
Statement st=conn.createStatement();
Random r=new Random();
int id=r.nextInt(1000);
student.setId(id);
String sql="insert into student (id,sex,score,name) values ("+id+",'"+student.getSex()+"',"+student.getScore()+",'"+student.getName()+"')";
st.executeUpdate(sql);
JDBCBasic.closeConn(st, null, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return student;
}
//这个方法是修改表中的数据
public boolean updateNameById(String name,int id) {
Connection conn=JDBCBasic.getConnection();
boolean flag=false;
try {
Statement st=conn.createStatement();
String sql="update student set name='"+name+"' where id="+id;
if(st.executeUpdate(sql)>0) {
flag=true;
};
JDBCBasic.closeConn(st, null, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
//删除表中数据
public boolean deleteByName(String name) {
Connection conn=JDBCBasic.getConnection();
boolean flag=false;
try {
Statement st=conn.createStatement();
String sql="delete from student where name='"+name+"'";
if(st.executeUpdate(sql)>0) {
flag=true;
};
JDBCBasic.closeConn(st, null, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
}
测试
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentService ss=new StudentService();
Student student=new Student();
student.setName("Alex2");
student.setScore(100);
student.setSex("男");
ss.add(student);
ss.deleteByName("allen");
ss.updateNameById("harry2020", 2);
String sql="select * from student";
List<Student> ls=ss.getAllStudent(sql);
for(Student s:ls) {
//打印对象,其实默认执行对象的toString方法
//下面打印的是s.toString方法返回的结果
System.out.println(s);
}
}
结果
Student [id=1, sex=男, cname=null, mobile=null, score=89, name=王五]
Student [id=2, sex=女, cname=null, mobile=null, score=99, name=harry2020]
Student [id=3, sex=男, cname=null, mobile=null, score=79, name=张三]
Student [id=37, sex=男, cname=null, mobile=null, score=100, name=Alex2]
Student [id=393, sex=男, cname=null, mobile=null, score=100, name=Alex2]
参考文献:https://baike.baidu.com/item/statement/4771842?fr=aladdin#2
weixin_44270171 发布了5 篇原创文章 · 获赞 2 · 访问量 37 私信 关注