我们怎么使用数据库
使用可视化工具:
首先打开nevicat,输入连接名,用户名密码,编写sql,点击执行
在java编辑器连接数据库也是一样
加载驱动,通过连接名,用户名密码获取连接,连接成功即登陆了数据库,写sql,执行
package com.company;
import javax.xml.transform.Result;
import java.sql.*;
public class TestJDBC {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// 加载驱动 mysql8版本需要写这个路径
Class.forName("com.mysql.cj.jdbc.Driver");
// 协议://主机地址:端口号/数据库名?参数1&参数2&参数3
String url = "jdbc:mysql://localhost:3306/learn45?useUnicode=true&characterEncoding=utf8&useSSL=true";
String name = "root";
String password = "123";
//连接成功,获取数据库对象,Connection代表数据库,数据库里的方法都能用(rollback,commit,setAutoCommit)
// connection不为空即为连接成功
Connection connection = DriverManager.getConnection(url,name,password);
// Statement执行sql的类
Statement st = connection.createStatement();
String sql = "select `sno` from student";
//执行sql返回ResultSet结果集,封装了全部查询的对象 查询用executeQuery 增删改用executeUpdate返回受影响行数
// getObject() 一切类型;getInt() ;getDouble() ;getString()一般知道返回什么数据类型就用确定得了
ResultSet rs = st.executeQuery(sql);
while (rs.next()){
// 返回不同类型的数据库字段
System.out.println("学号"+rs.getInt("id"));
}
// 释放连接
rs.close();
st.close();
connection.close();
}
}
遇到的问题
1.加载不了驱动
我是mysql8!加载驱动时候类路径要写class.forname("com.mysql.cj.jdbc.driver") 2.properties文件不高亮显示解决 IDEA默认对properties文件是进行关键字检查造成 setting里面搜索 ”Unused“ 或者 "Inspections" 关键字 将其中 "Properties Files" 的Unused Property 的检查去掉
?
但是总这么写太麻烦了
我们来封装一个JDBC工具类
里面主要写开启连接和释放连接的过程
用到的包
扩大变量作用域
?
加载驱动,只用加载一次?
读取配置文件方法参考这篇文章
https://blog.csdn.net/dragon901/article/details/79809305
?获取连接和关闭连接方法
?工具类是为避免程序耦合性
测试类:新增
package com.company;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestInsert {
private static Connection connection=null;
private static Statement statement=null;
private static ResultSet resultSet=null;
public static void main(String[] args) throws SQLException {
TestJDBCUtils testJDBCUtils = new TestJDBCUtils();
connection = testJDBCUtils.getConnection();
statement = connection.createStatement();
String sql = "insert into student (`sno`,`sname`,`ssex`)values('111','吕牧博','1')";
int rs = statement.executeUpdate(sql);
if(rs != 0){
System.out.println("successful!");
}
testJDBCUtils.close(connection,statement,resultSet);
}
}
删除
package com.company;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestDelete {
private static Connection connection=null;
private static Statement statement=null;
private static ResultSet resultSet=null;
public static void main(String[] args) throws SQLException {
TestJDBCUtils testJDBCUtils = new TestJDBCUtils();
connection = testJDBCUtils.getConnection();
statement = connection.createStatement();
String sql = "delete from student where `sno`='111'";
int rs = statement.executeUpdate(sql);
if(rs != 0){
System.out.println("successful!");
}
testJDBCUtils.close(connection,statement,resultSet);
}
}
?更新
package com.company;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestUpdate {
private static Connection connection=null;
private static Statement statement=null;
private static ResultSet resultSet=null;
public static void main(String[] args) throws SQLException {
TestJDBCUtils testJDBCUtils = new TestJDBCUtils();
connection = testJDBCUtils.getConnection();
statement = connection.createStatement();
String sql = "update student set `sno`='911' where `sno`='111'";
int rs = statement.executeUpdate(sql);
if(rs != 0){
System.out.println("successful!");
}
testJDBCUtils.close(connection,statement,resultSet);
}
}
建议:自己写完sql去nevicat里运行一下,成功了在放到代码里
剩下的可以防止sql注入的类明天再写
|