jdbc如何创建存储过程
发布网友
发布时间:2022-05-03 02:51
我来回答
共3个回答
懂视网
时间:2022-05-03 07:13
查看数据库字符集
SHOW VARIABLES LIKE ‘character_set%‘;
看到客户端连接数据库返回集都支持了utf8mb4
方案2更改服务器配置
这里网上有好多解决方案,直接配置数据库服务器的启动参数支持utf8mb4,做个demo还可以,测试环境多个部门共用一个mysql实例,更改配置的话所有的字符集都会更改;线上环境也不可行:阿里云的字符集是在新建实例的时候配置的,只能重建然后迁移数据
方案3让MySQL自动转换
还有一个现象是,使用datagrip是可以直接插入表情的,也就是可以在不更改服务器配置的情况下从客户端设置,或者直接发送表情让mysql自己识别
连接直接设置utf8,
shardingsphere:
datasource:
names: master
# 数据源
master:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com/db?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: u
password: p
然后用接口直接把utf8传表情过去
报错:
chUpdateException: Incorrect string value: ‘xF0x9Fx98x82xF0x9F...‘ for column ‘msg_content‘ at row 1
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89) ~[spring-jdbc-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
然后网上搜到这个https://blog.csdn.net/FHGFHFYUUGY/article/details/90292139
参考 connector-j-reference-charset 可以看到如果程序要插入 utf8mb4 字符, 需要满足以下条件:
Connector/J 5.1.47 及以上版本:
1. 指定 characterEncoding 参数为 UTF8/UTF-8 即可, 新版本直接映射到 utf8mb4 编码;
2. 如果 connectionCollation 指定的排序规则不是 utf8mb4 相关的, 则 characterEncoding 参数会重写为排序规则对应的编码;
Connector/J 5.1.47 以下版本:
1. 设置 MySQL 参数变量 character_set_server=utf8mb4;
2. 指定 characterEncoding 参数为 UTF8/UTF-8, jdbc 程序会进行探测是否使用 utf8mb4;
和mysql连接器版本有关,从上面保存日志看到现在使用的是5.0.4,而我们的character_set_server=utf8,所以把连接器升级到5.1.47就可以 了
<!-- Use MySQL Connector-J -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
注意更改5.1.47的默认时区
保存表情成功:
一次JDBC支持表情存储的配置过程
标签:url 启动参数 tor translate com class release convert tran
热心网友
时间:2022-05-03 04:21
//创建存储过程,记住关闭对象
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class UseSQLDataBase3 {
Connection con;
Statement state;
ResultSet rs;
CallableStatement cs;//调用存储过程使用的接口
String url = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=test";
String user = "sa";
String password = "";
public void connectSQL(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
try {
con = DriverManager.getConnection(url, user, password);
state = con.createStatement();
//创建存储过程SQL语句
String createProcere = " create procere SHOW_SUPPLIERS " +
"as "+
" select SUPPLIERS.SUP_NAME,COFFEES.COF_NAME "+
"from suppliers,coffees"+
"where suppliers.sup_id = coffees.sup_id "+
"order by sup_name";
//创建存储过程
state.executeUpdate("USE TEST");
state.executeUpdate(createProcere);
//调用存储过程
cs = con.prepareCall("{call SHOW_SUPPLIERS}");//创建一个 CallableStatement 对象来调用数据库存储过程
//返回调用的结果集
rs = cs.executeQuery();
//输出结果
System.out.println("SUPPLIERS.SUP_NAME COFFEES.COF_NAME");
while(rs.next()){
String sup_name = rs.getString(1);
String coffees_name = rs.getString(2);
System.out.println(sup_name + " " + coffees_name);
}
con.close();
state.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
热心网友
时间:2022-05-03 05:39
//创建存储过程,记住关闭对象
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class UseSQLDataBase3 {
Connection con;
Statement state;
ResultSet rs;
CallableStatement cs;//调用存储过程使用的接口
String url = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=test";
String user = "sa";
String password = "";
public void connectSQL(){
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
try {
con = DriverManager.getConnection(url, user, password);
state = con.createStatement();
//创建存储过程SQL语句
String createProcere = " create procere SHOW_SUPPLIERS " +
"as "+
" select SUPPLIERS.SUP_NAME,COFFEES.COF_NAME "+
"from suppliers,coffees"+
"where suppliers.sup_id = coffees.sup_id "+
"order by sup_name";
//创建存储过程
state.executeUpdate("USE TEST");
state.executeUpdate(createProcere);
//调用存储过程
cs = con.prepareCall("{call SHOW_SUPPLIERS}");//创建一个 CallableStatement 对象来调用数据库存储过程
//返回调用的结果集
rs = cs.executeQuery();
//输出结果
System.out.println("SUPPLIERS.SUP_NAME COFFEES.COF_NAME");
while(rs.next()){
String sup_name = rs.getString(1);
String coffees_name = rs.getString(2);
System.out.println(sup_name + " " + coffees_name);
}
con.close();
state.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}