jar包下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java?cf_chl_captcha_tk=pmd_0Hlhf0sFkSa0kuykrBJ9W.Ep8tawCh0cl7Gr72sG8fo-1631537827-0-gqNtZGzNAxCjcnBszQiR
import javax.xml.transform.Result; import java.lang.*; import java.sql.*; public class jdbcDemo1 { public static void main(String[] args) { try{ //1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.用户信息和url String url="jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=true"; String userName="root"; String password="951731"; //3.连接数据库 connection代表数据库对象 Connection connection=DriverManager.getConnection(url,userName,password); //4.创建statement对象来执行sql对象 Statement st=connection.createStatement(); String sql="select * from users"; //5.ResultSet对象用来存放sql语句执行的结果 ResultSet resultSet=st.executeQuery(sql); //如果是查询操作用executeQuery(sql)方法,如果是增删改操作统一为executeUpdate(sql)方法,execute()方法能执行任何语句 while(resultSet.next()){ //ResultSet对象指针只想第一条数据每next一次指针下移 System.out.print(resultSet.getInt("id")); //如果知道查询的字段类型就用get对应字段类型,如果不知道则可都用getObject() System.out.print(resultSet.getString("name")); System.out.print(resultSet.getString("password")); System.out.print(resultSet.getString("email")); System.out.print(resultSet.getDate("birthday")); System.out.println(); } //6.释放连接 resultSet.close(); st.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); }catch (SQLException sq){ sq.getErrorCode(); } } }
1.4、ResultSet对象的常用方法
1 resultSet.beforeFirst(); //指针移动到最前面 2 resultSet.afterLast(); //指针移动到最后面 3 resultSet.next(); //指针移到下一个数据 4 resultSet.previous(); //指针移到前一行 5 resultSet.absolute(row); //指针移动到指定的第row行
以上方法用的是Statement对象来执行sql语句,然而这种方法并不安全,为解决这种问题,可以使用PreparedStatement接口实现对数据库表内容的增删改操作,在现实的开发中也常用PreparedStatement接口而不是Statement接口进行增删改操作:使用PreparedStatement对于代码的可维护性和可读性提高了;使用PreparedStatement尽最大可能提高性能;最重要的一点是极大地提高了安全性。可以防止数据库的注入问题。
PreparedStatement接口继承了Statement的所有功能。另外它还整合一整套getXXX()和setXXX()方法,用于对值得获取和输入设置。同时,它还修改了三个方法execute、executeQuery、executeUpdate使它们不需要参数。这些方法的Statement形式,不应该再用于PreparedStatement对象。
PreparedStatement中的方法摘要:
1、executeQuery():在此PreparedStatement对象中执行SQL语句,并返回该查询生成的ResultSet对象。
2、executeUpdate():在此PreparedStatement对象中执行SQL语句,该语句必须是一个SQL数据操作语言(Date Manipulation Language,DML)语句,比如
insert、update、delete语句;或者是无返内容的SQL语句,比如DDL语句。
3、execute():在此PreparedStatement对象中执行SQL语句,该语句可以是任何种类的SQL语句。
package com.zhao.les4; import java.text.SimpleDateFormat; import java.util.*; import java.sql.*; import java.util.Date; public class jd { public static void main(String[] args) { try{ Class.forName("com.mysql.cj.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&"; String userName="root"; String password="951731"; Connection connection= DriverManager.getConnection(url,userName,password); //sql语句中要输入的值用占位符?代替。在创建完PrepareStatement对象后用set???()方法传入 String sql="insert into users(id,name,password,email,birthday) values(?,?,?,?,null)"; //与Statement对象不同,PrepareStatement需要在创建对象时传入sql语句,对sql语句进行预编译 PreparedStatement pstm=connection.prepareStatement(sql); pstm.setInt(1,6); //第一个参数代表上边sql语句的第几个需要传入的值,第二个参数代表传入的值 pstm.setString(2,"nidie"); pstm.setString(3,"999999"); pstm.setString(4,"zhao@qq.com"); int i=pstm.executeUpdate(); if(i>0){ System.out.println("插入成功"); }else{ System.out.println("插入失败"); } String sql2="select * from users"; PreparedStatement pstm2=connection.prepareStatement(sql2); ResultSet rs=pstm2.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("id")); System.out.println(rs.getString("name")); System.out.println(rs.getString("password")); System.out.println(rs.getString("email")); System.out.println(rs.getDate("birthday")); } rs.close(); pstm2.close(); pstm.close(); connection.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } //注意sql语句一定检查是否正确,本人就因为sql语句错误而找了好久错误