1、创建项目
jar包下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java?cf_chl_captcha_tk=pmd_0Hlhf0sFkSa0kuykrBJ9W.Ep8tawCh0cl7Gr72sG8fo-1631537827-0-gqNtZGzNAxCjcnBszQiR
1.1、将jdbc的jar包导入到lib文件夹下
1.2、将jar包添加到项目的库中
1.3、jdbc连接数据库步骤
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行
2.PrepareStatement方法
以上方法用的是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语句错误而找了好久错误