JDBC:Java和数据库的连接

注:这个笔记是大一写的 学到这里的时候还没学Maven 因而在本例子里采用的是添加jar包的方式
IDE用的是Idea

首先 项目里创建lib包 放入下载的JDBC的jar包 在idea里右键此JDBC 点击Add as Library选项

步骤
1、注册驱动 目的:告诉java虚拟机使用哪个数据库的驱动
2、获得连接
3、获得语句执行平台
4、执行sql语句
5、处理结果
6、释放资源

1、注册驱动 告诉jvm使用哪个数据库的驱动:mysql oracle db2 sqlserver…
注册驱动采用反射技术 将驱动加载到内存

// Driver在哪里?填入路径
Class.forName("com.mysql.cj.JDBC.Driver");

2、获得连接 获得数据库的连接
getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接
url:数据库的链接地址,格式:JDBC:mysql://链接主机ip地址(XXX.XX.XX.XX / localhost):mysql端口号3306/数据库名
user:数据库用户名(root)
password:数据库密码(123456)

String url="JDBC:mysql://localhost:3306/mytest?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false";//?问号表明后面要带参数
String user="root";
String password="123456";

Connection connection= DriverManager.getConnection(url,user,password);

3、获得语句执行平台
通过数据库链接对象connection获取sql语句的执行者对象
Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库

Statement statement=connection.createStatement();

4、执行sql语句

String sql="INSERT INTO student(NAME,age) VALUES ('学生M',16)";

5、处理结果
int executeUpdate(String sql) 执行给定SQL语句 该语句可能为INSERT、UPDATE 或 DELETE 语句 或者不返回任何内容的SQL语句

int count=statement.executeUpdate(sql);//count变量表明有几条语句改变
System.out.println(count);

6、释放资源

statement.close();
connection.close();

另一个案例:查询功能

public static void main(String[] args) throws ClassNotFoundException, SQLException {
    Class.forName("com.mysql.cj.JDBC.Driver");
    String url="JDBC:mysql://localhost/mytest?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false";
    String user="root";
    String password="123456";
    Connection con= DriverManager.getConnection(url,user,password);
    Statement sta=con.createStatement();
    
    String sql="select * from student";
    // ResultSet executeQuery(String sql) 执行给定的SQL语句,该语句返回单个ResultSet对象
    ResultSet rs=sta.executeQuery(sql);

    // boolean next() 将光标从当前位置向前移一行
    while (rs.next())
    {
        //取值
        System.out.println(rs.getString("id")+"  "+rs.getString("name")+"  "+rs.getInt("age"));
    }
    sta.close();
    con.close();
    rs.close();
}

补充:略谈sql注入及解决方法

何为sql注入?

在未掌握表中的任何数据的情况下通过WHERE关键字查询表中全部数据
例:

SELECT * FROM student WHERE NAME='学生S' AND age=29 OR 1=1;

在这里 【OR 1=1】可以调取所有的表

如何解决mysql注入问题?

Statement改为用PreparedStatement
另外具有高效的特点

注意:sql语句中的参数全部用[?]问号占位符【很重要】

Class.forName("com.mysql.cj.JDBC.Driver");
String url="JDBC:mysql://localhost/mytest?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false";
String user="root";
String password="123456";
Connection con= DriverManager.getConnection(url,user,password);

String sql="select * from student where name=? and age=?";

PreparedStatement sta=con.prepareStatement(sql);

sta.setString(1,"学生A"); // 第一个问号
sta.setString(2,"16"); // 第二个问号

ResultSet rs=sta.executeQuery();

while (rs.next())
{
	System.out.println(rs.getString("id")+"  "+rs.getString("name")+"  "+rs.getInt("age"));
}

sta.close();
con.close();
rs.close();

JDBC是最基础的数据库连接
开发中通常不会使用JDBC 但会使用以JDBC为基础的框架 例如Mybatis


发布了56 篇原创文章 · 获赞 0 · 访问量 1189

猜你喜欢

转载自blog.csdn.net/Piconjo/article/details/104591101