1、execute与executeUpdate异同点
摘自
相同点:execute 与 executeUpdate 都可以执行增加,删除,修改的操作。
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
Statement s = c.createStatement();) {
String sqlInsert = "insert into Hero values (null,'盖伦',616,100)";
String sqlDelete = "delete from Hero where id = 100";
String sqlUpdate = "update Hero set hp = 300 where id = 100";
// 相同点:都可以执行增加,删除,修改
s.execute(sqlInsert);
s.execute(sqlDelete);
s.execute(sqlUpdate);
s.executeUpdate(sqlInsert);
s.executeUpdate(sqlDelete);
s.executeUpdate(sqlUpdate);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
不同点
1、execute可以执行查询语句,然后通过 getResultSet,把结果集取出来,executeUpdate不能执行查询语句
2、execute 返回boolean类型,true 表示执行的是查询语句,false表示执行的是insert,delete,update等等, executeUpdate返回的是int类型,表示有多少条数据受到了影响(受影响的行数)
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
Statement s = c.createStatement();) {
// 不同1:execute可以执行查询语句
// 然后通过getResultSet,把结果集取出来
String sqlSelect = "select * from hero";
s.execute(sqlSelect);
ResultSet rs = s.getResultSet();
while (rs.next()) {
System.out.println(rs.getInt("id"));
}
// executeUpdate不能执行查询语句
// s.executeUpdate(sqlSelect);
// 不同2:
// execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
boolean isSelect = s.execute(sqlSelect);
System.out.println(isSelect);
// executeUpdate返回的是int,表示有多少条数据受到了影响
String sqlUpdate = "update Hero set hp = 300 where id < 100";
int number = s.executeUpdate(sqlUpdate);
System.out.println(number);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Q&A
基础配置如何定义
// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB";
// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
注:当MySQL 8.0 以上的驱动时控制台会出现报红提示
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
译文:
正在加载类com.mysql.jdbc.Driver。这是不推荐的。新的驱动程序类是com.mysql.cj.jdbc.driver。驱动程序通过SPI自动注册,通常不需要手动加载驱动程序类。
说明:SPI SPI(system packet interface,系统包接口)用于物理层和链路层的链接,广泛地应用在通信接口中。。。 大致就是指接口吧。
serverTimezone
1、概念: serverTimezone连接mysql数据库时指定了时差
2、时区示例:
//北京时间东八区
serverTimezone=GMT%2B8
//上海时间
serverTimezone=Asia/Shanghai
3、重要性
(1)时差会导致插入的date数据发生变化(自动更换时差)
(2)UTC是全球标准时间,北京地区早标准时间8小时
(3)注意使用useSSL=false
————————————————
版权声明:本文为CSDN博主「成长中的码农Mr.Yellow」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
附:DBUtil工具类
package zpb.practice.db;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
/**
* @author Peter Cheung
* @user PerCheung
* @date 2021/8/22 15:11
*/
public class DBUtil {
//连接信息
private static String driverName;
private static String url;
private static String username;
private static String password;
//注册驱动,使用静态块,只需注册一次
static {
//初始化连接信息
Properties properties = new Properties();
try {
properties.load(new FileReader("src/db.properties"));
driverName = properties.getProperty("driverName");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
//1、注册驱动
try {
//通过反射,注册驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//jdbc对象
private Connection connection = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
//获取连接
public void getConnection() {
try {
//2、建立连接
connection = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
//更新操作:增删改
public int update(String sql, Object[] objs) {
int i = 0;
try {
getConnection();
//3、创建sql对象
preparedStatement = connection.prepareStatement(sql);
for (int j = 0; j < objs.length; j++) {
preparedStatement.setObject(j + 1, objs[j]);
}
//4、执行sql,返回改变的行数
i = preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
//查询操作
public ResultSet select(String sql, Object[] objs) {
try {
getConnection();
//3、创建sql对象
preparedStatement = connection.prepareStatement(sql);
for (int j = 0; j < objs.length; j++) {
preparedStatement.setObject(j + 1, objs[j]);
}
//4、执行sql,返回查询到的set集合
resultSet = preparedStatement.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
//断开连接
public void closeConnection() {
//5、断开连接
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
标签:jdbc,String,mysql,数据库,使用,sql,catch,import
From: https://www.cnblogs.com/polish/p/16814801.html