欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Jdbc笔记01

Jdbc笔记01

2025/4/11 14:37:34 来源:https://blog.csdn.net/2403_87793978/article/details/144873371  浏览:    关键词:Jdbc笔记01

0、前言

本系列文章作为学习笔记出现,如有错误的地方还请各位批评指正。
如果有其他问题可以在本文后留言评论共同探讨。

jdbc笔记01

  • 0、前言
  • 1、引入依赖
  • 2、使用jdbc连接数据库
  • 3、Statement
  • 4、关于sql注入
  • 5、PreparedStatement

1、引入依赖

使用mysql-connector-java.jar包引入依赖
此处采用maven构建的方式来引入

<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>9.1.0</version>
</dependency>

2、使用jdbc连接数据库

要获取一个 Connection 对象,需要使用 DriverManager 类的 getConnection 方法,传入数据库的 URL、用户名和密码。

		//使用jdbc连接//这里的test写要连接的数据库的名称//serverTimezone是用于指定指定 MySQL 服务器时区String url = "jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai";String username = "root";String password = "root";try {//加载驱动Class.forName("com.mysql.cj.jdbc.Driver");//获取连接Connection conn = DriverManager.getConnection(url,username,password);conn.close();} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (SQLException e) {throw new RuntimeException(e);}

3、Statement

sql语句执行器
要创建一个 Statement 对象,首先需要通过 Connection 对象的 createStatement() 方法。

Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
  • 执行查询操作时调用executeQuery()方法
String sql = "SELECT id, name FROM users";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {//使用列名得到对应数据int id = rs.getInt("id");String name = rs.getString("name");//使用下标得到对应数据 //注意在数据库中是从1开始的,第1列,第2列;而不像数组中是从0开始的id = rs.getInt(1);name = rs.getString(2);System.out.println("ID: " + id + ", Name: " + name);
}
  • 执行增改删操作时调用executeUpdate()方法,会返回影响的行数
String_INSERT = "INSERT INTO users (name, age) VALUES ('John Doe', 30)";
int rowsInserted = statement.executeUpdate(_INSERT);String_UPDATE = "UPDATE users SET age = 31 WHERE name = 'John Doe'";
int rowsUpdated = statement.executeUpdate(_UPDATE);String_DELETE = "DELETE from users WHERE name = 'John Doe'";
int rowsDeleted = statement.executeUpdate(_DELETE);

4、关于sql注入

Scanner sc = new Scanner(System.in);
String playerName = sc.nextLine();
playerName = "'" + playerName + "'";
//LIMIT是分页查询
String sql = "SELECT * FROM userdata WHERE playerName = " + playerName + "LIMIT 0,20";
Connection conn = DriverManager.getConnection(url,username,password);
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery(sql);

正常情况:用户输入“小明”,得到小明对应的一条数据。
sql注入:用户输入“小明’ or 1 = '1”,就会得到数据库前20条数据

为了避免sql注入我们常用:

  • ?占位符
  • 使用参数化查询

5、PreparedStatement

String sql = "SELECT * FROM userdata WHERE userName = ?";
//创建预处理执行器
PreparedStatement ps = conn.prepareStatement(sql);
//设置占位符替换的值
//注意下标问题,从1开始
ps.setString(1,goodsName);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词