Tag: mysql

JDBC的难倒SQLexception

我正在尽我所能让JDBC工作,现在唯一困扰我的是这个例外,我不知道: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘????????????????’ at line 1 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1890) com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3523) com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2386) com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2163) com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:794) com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:374) com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) java.sql.DriverManager.getConnection(libgcj.so.10) java.sql.DriverManager.getConnection(libgcj.so.10) 我用它连接…… Class.forName(“com.mysql.jdbc.Driver”); DriverManager.getConnection(“jdbc:mysql://localhost:3306/mysql”, “username”, “password”); 非常感谢!

如果应用程序使用另一个时区而不是MySQL,则Hibernate会保存/检索日期减去日期

我在MACHINE_A上使用时区GMT + 3在tomcat上启动了一个应用程序。 我使用带有时区UTC的MACHINE_B上启动的远程mysql服务器。 我们使用spring-data-jpa来表示持久性。 作为问题的一个例子,我将展示存储库: public interface MyRepository extends JpaRepository { Optional findByDate(LocalDate localDate); } 如果我通过localDate 2018-09-06 ,我得到的实体的日期是2018-09-05 (前一天) 在日志中我看到: 2018-09-06 18:17:27.783 TRACE 13676 — [nio-8080-exec-3] ohtype.descriptor.sql.BasicBinder : binding parameter [1] as [DATE] – [2018-09-06] 我搜索了很多这个问题并找到了几篇内容相同的文章(例如https://moelholm.com/2016/11/09/spring-boot-controlling-timezones-with-hibernate/ ) 所以,我有以下application.yml : spring: datasource: url: jdbc:mysql://localhost:3306/MYDB?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC username: root password: ***** jpa: hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl properties: hibernate: […]

MySQL中的MySQL插入语句的性能:批处理模式预处理语句与具有多个值的单个插入

我正在设计一个MySQL数据库,它需要在各种InnoDB表中每秒处理大约600行插入。 我当前的实现使用非批处理的预准备语句。 但是,写入MySQL数据库的瓶颈和我的队列大小会随着时间的推移而增加。 该实现是用Java编写的,我不知道该版本是否有用。 它使用MySQL的Java连接器 。 我需要考虑明天切换到JDBC 。 我假设这是两个不同的连接器包。 我已经在这个问题上阅读了以下主题: 优化MySQL插入以处理数据流 MyISAM与InnoDB 将二进制数据插入MySQL(没有PreparedStatement) 并从mysql网站: http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html 我的问题是: 有人在批处理模式下使用INSERT与预准备语句相比,使用具有多个VALUE的单个INSERT语句,是否有任何关于性能差异的建议或经验。 MySQL Java连接器与JDBC之间的性能差异是什么? 我应该使用其中一个吗? 这些表用于存档目的,并且将看到约90%写入〜10%读取(甚至可能更少)。 我正在使用InnoDB。 这是MyISAM的正确选择吗? 预先感谢您的帮助。

如何在Java中使用预处理语句进行select查询?

我曾多次尝试使用预处理语句,但它返回SQLexception。 这是我的代码: public ArrayList name(String mobile, String password) { ArrayList getdata = new ArrayList(); PreparedStatement stmt = null; try { String login = “select mobile, password from tbl_1 join tbl_2 on tbl_1.fk_id=2.Pk_ID where mobile=? and password=?”; String data = “select * from tbl_2 where password='” + password + “‘”; PreparedStatement preparedStatement = conn.prepareStatement(login); preparedStatement.setString(1, mobile); […]

将参数传递给JDBC PreparedStatement

我正在尝试为我的程序制作validation课程。 我已经建立了与MySQL数据库的连接,我已经在表中插入了行。 该表由firstName , lastName和userID字段组成。 现在我想通过构造函数的参数在数据库中选择一个特定的行。 import java.sql.*; import java.sql.PreparedStatement; import java.sql.Connection; public class Validation { private PreparedStatement statement; private Connection con; private String x, y; public Validation(String userID) { try { Class.forName(“com.mysql.jdbc.Driver”); con = DriverManager.getConnection( “jdbc:mysql://localhost:3306/test”, “root”, “”); statement = con.prepareStatement( “SELECT * from employee WHERE userID = ” + “”” + userID); ResultSet […]

Java + Tomcat,Dying数据库连接?

我有一个tomcat实例设置,但我在context.xml中配置的数据库连接在不活动时间后仍然会死亡。 当我检查日志时,我收到以下错误: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功收到的最后一个数据包是68051秒前。 成功发送到服务器的最后一个数据包是68051秒前,这比服务器配置的’wait_timeout’值长。 您应该考虑在应用程序中使用之前到期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用Connector / J连接属性“autoReconnect = true”来避免此问题。 这是context.xml中的配置: 我正在使用autoReconnect = ture,就像错误所说的那样,但连接一直在死。 我以前从未见过这种情况。 我还validation了所有数据库连接都已正确关闭。

与csv文件相比,将mysql表转换为spark数据集的速度非常慢

我在amazon s3中有csv文件,大小为62mb(114000行)。 我正在将其转换为spark数据集,并从中获取前500行。 代码如下; DataFrameReader df = new DataFrameReader(spark).format(“csv”).option(“header”, true); Dataset set=df.load(“s3n://”+this.accessId.replace(“\””, “”)+”:”+this.accessToken.replace(“\””, “”)+”@”+this.bucketName.replace(“\””, “”)+”/”+this.filePath.replace(“\””, “”)+””); set.take(500) 整个操作需要20到30秒。 现在我尝试相同但是使用csv我正在使用带有119 000行的mySQL表。 MySQL服务器在亚马逊ec2中。 代码如下; String url =”jdbc:mysql://”+this.hostName+”:3306/”+this.dataBaseName+”?user=”+this.userName+”&password=”+this.password; SparkSession spark=StartSpark.getSparkSession(); SQLContext sc = spark.sqlContext(); DataFrameReader df = new DataFrameReader(spark).format(“csv”).option(“header”, true); Dataset set = sc .read() .option(“url”, url) .option(“dbtable”, this.tableName) .option(“driver”,”com.mysql.jdbc.Driver”) .format(“jdbc”) .load(); set.take(500); 这需要5到10分钟。 我在jvm里面运行火花。 在两种情况下使用相同的配置。 我可以使用partitionColumn,numParttition等但我没有任何数字列,还有一个问题是我不知道该表的模式。 我的问题不是如何减少所需的时间,因为我知道在理想情况下火花将在集群中运行但我无法理解的是为什么在上述两种情况下这个大的时间差异?

Struts + Hibernate:@SessionTarget无效

我正在使用struts2-fullhibernatecore-plugin-2.2.2-GA.jar在我的DAO类中注入一个session ,如下所示: public class UserDAO { @SessionTarget Session session; @TransactionTarget Transaction transaction; public List getUsers() { return session.createQuery(“from user”).list(); } } 但是我得到了 java.lang.NullPointerException com.wudi.DAO.UserDAO.getUsers(UserDAO.java:28) com.wudi.action.UserListAction.execute(UserListAction.java:24) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) … 根据调试输出, UserDAO中的session和transaction为null 。 一些文件供参考: User.java : @Entity @Table(name = “user”) public class User implements Serializable { @Id @GeneratedValue private int id; @Column private String […]

从mysql获取最后一条记录

我正在使用mysql并面临一些问题。 我想检索插入的最后一行。 <> 以下是我创建表格的方法。 create table maxID (myID varchar(4)) 我在其中插入了四个值,如下所示 insert into maxID values (‘A001’) insert into maxID values (‘A002’) insert into maxID values (‘A004’) insert into maxID values (‘A003’) 当我select myID, last_insert_id() as NewID from maxID执行select myID, last_insert_id() as NewID from maxID ,我得到如下输出 myId NewID A001 0 A002 0 A004 0 A003 0 当我尝试下面的代码, […]

“EEE MMM dd HH:mm:ss ZZZ yyyy”日期格式为java.sql.Date

我正在尝试将EEE MMM dd HH:mm:ss ZZZ yyyy为YYYY-MM-DD格式,因此我可以将其插入MySQL数据库。 我没有收到任何错误,但插入我的数据库的日期是错误的,每行都是一样的… String date = Sat Mar 04 09:54:20 EET 2017; SimpleDateFormat formatnow = new SimpleDateFormat(“EEE MMM dd HH:mm:ss ZZZ yyyy”); SimpleDateFormat formatneeded=new SimpleDateFormat(“YYYY-MM-DD”); java.util.Date date1 = (java.util.Date)formatnow.parse(date); String date2 = formatneeded.format(date1); java.util.Date date3= (java.util.Date)formatneeded.parse(date2); java.sql.Date sqlDate = new java.sql.Date( date3.getTime() ); pst.setDate(1, sqlDate);