Tag: mysql

我可以用MySQL Connector / J执行多个以分号分隔的查询吗?

我的mysql db的jdbc驱动程序是版本5.1.25。 我想像这样执行sql查询: statement.execute(“select fullName from user where user_id=1; select fullName from user where user_id=2”); 我总是收到exception: Exception in thread “main” com.mysql.jdbc.exceptions.jdbc4.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 ‘select fullName from user where user_id=2’ at line 1 […]

无论如何,我都无法在Hibernate中批量处理MySQL INSERT语句

我目前正面临着众所周知且常见的Hibernate插入批处理问题。 我需要保存500万行的批次。 我首先尝试使用更轻的有效载荷。 由于我必须只插入两种类型的实体(首先是所有类型A的记录,然后是所有类型B的记录,都指向常见类型C ManyToOne parent),我想从JDBC批量插入中获取最大优势。 我已经阅读了很多文档,但我没有尝试过。 我知道为了使用批量插入,我不能使用实体生成器。 所以我删除了AUTO_INCREMENT ID并且我用一个技巧设置ID: SELECT MAX(ID) FROM ENTITIES并且每次都递增。 我知道我必须定期清理会议。 我将提前发布代码,但无论如何我每500个元素执行一次事务。 我知道我必须设置hibernate.jdbc.batch_size与我的应用程序的批量大小一致,所以我在LocalSessionFactoryBean设置它(Spring ORM集成) 我知道我必须在连接URL中启用重写批处理语句。 这是我的实体 共同的父实体。 这将首先插入到单个事务中。 我不关心这里的自动增量列。 每批作业只有一个记录 @Entity @Table(…) @SequenceGenerator(…) public class Deal { @Id @Column( name = “DEAL_ID”, nullable = false) @GeneratedValue( strategy = GenerationType.AUTO) protected Long id; ……………. } 其中一个孩子(假设每批2.5M记录) @Entity @Table( name = “TA_LOANS”) public […]

preparedStatement语法错误

我最近遇到了Java PreparedStatements的这个问题。 我有以下代码: String selectSql1 = “SELECT `value` FROM `sampling_numbers` WHERE `value` < (?)" ; ResultSet rs1 = con.select1(selectSql1,randNum); select1方法的位置 public ResultSet select1(String sql, int randNum) { try { this.stmt = con.prepareStatement(sql); stmt.setInt(1, randNum); return this.stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); return null; } } 但是,它一直在抛出这个错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL […]

MySQL选择范围内的坐标

我在我的数据库中有100 000个地址(即记录)。 它们中的每一个都有自己的坐标(纬度和经度)。 现在,考虑到用户的地理位置(纬度和经度),我想在地图上仅显示5英里范围内的地址(使用Google maps v3 API)。 这意味着通常只需要在10万个地址中显示5或6个地址。 一种解决方案可以是检索所有记录并在Java中应用公式来计算每个地址的距离,并仅在它在范围内时显示它。 这将浪费处理能力,因为当我只需要在地图上显示5或6个记录时,我需要检索所有记录。 如何在数据库端(MySQL)解决此问题,以便仅返回5英里范围内的地址?

java – 独立应用程序的DataSource – 没有应用程序服务器

我想从独立的应用程序连接到MySQL数据库。 没有应用程序/ Web服务器。 此页面建议我应该使用DriverManager来创建连接。 但是, 此页面表明无法合并从DriverManager创建的连接。 但是连接池对我来说是必须的,因为应用程序使用各种线程同时写入数据库,因此关闭/重新创建连接不是最佳选择。 我应该为此目的使用哪种DataSource实现? 我查看了MysqlConnectionPoolDataSource,但我不确定它是否实际实现了连接池。 我还查看了Tomcat DataSource ,我确信它实现了一个连接池,但我不确定它是否可以在Tomcat之外使用。 当我关闭独立应用程序时,我该怎么做才能正确释放连接/池? 编辑:看起来Tomcat DataSource 可以从独立应用程序中使用,所以我将使用它。 它还有一个close方法,我假设它将释放连接。

如何使用java将阿拉伯语单词插入mysql数据库

我有一个java应用程序,想在mysql数据库中插入阿拉伯语单词,我的代码看起来像 Connection con = null; String url = “jdbc:mysql://localhost/”; String db = “students”; String driver = “com.mysql.jdbc.Driver”; try { Class.forName(driver); con = DriverManager.getConnection(url+db,”root”,””); Statement st = con.createStatement(); String name = new String(txtName.getText().getBytes(), “UTF-8”); int val = st.executeUpdate(“insert into student(name, roll) VALUES(‘”+name+”‘,'”+txtRoll.getText()+”‘)”); } catch (Exception ex) { ex.printStackTrace(); } 但它只插入’??????’。 我现在能做什么?

Hibernate Criteria API:获得n个随机行

我无法弄清楚如何从条件实例中获取n个随机行: Criteria criteria = session.createCriteria(Table.class); criteria.add(Restrictions.eq(‘fieldVariable’, anyValue)); … 那又怎样? 我找不到任何带有Criteria API的文档 这是否意味着我应该使用HQL? 感谢名单! 编辑:我得到的行数: int max = criteria.setProjecxtion(Projections.rowCount()).uniqueResult(); 如何获取索引在0到最大值之间的n个随机行? 再次!

com.mchange.v2.resourcepool.CannotAcquireResourceException:ResourcePool无法从其主工厂或源获取资源

我的Hibernate下有MySQL,我也使用c3p0-0.9.1连接池。 在笔记本电脑上运行时(我的意思是在本地)我没有错误。 但是当我在服务器上部署它时,我得到了这个exception: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. 这是我的堆栈跟踪: root cause com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463) 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:616) org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344) $Proxy8.beginTransaction(Unknown Source) com.hposg.domain.HPOSG.getItstance(HPOSG.java:56) com.hposg.domain.Game.(Game.java:43) […]

使hibernate反引所有表/列名称

我面临着与MySQL 5.0一起编写的遗留系统,现在需要将其迁移到MysQL 5.5(要求)。 我发现一列名为maxvalue ,它似乎是MySQL 5.5中的系统字。 因此,包含此列的所有Hibernate查询都会出现语法错误: 引起:java.sql.BatchUpdateException:您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在’maxvalue附近使用正确的语法 似乎Hibernate并不会自动反复引用`围绕字段名称。 如果我提取查询,则反引用`maxvalue`它在MySQL 5.5中正确运行。 我找到了解决方案如何明确强制特定字段/表的反引号。 问题是我不确定有多少其他列名会产生这样的问题。 有没有办法告诉Hibernate自动反引所有表/列名称? (这将产生有效的SQL,我不知道为什么默认情况下它没有为MySQL做到这一点)。 编辑 : 这个讨论几乎让我相信我想要的是不可能的。

Android + MySQL使用com.mysql.jdbc.Driver

我正在编写一个将连接到MySQL服务器的Android应用程序。 现在,我正在使用http:// localhost:3306 /通过XAMPP在我的计算机上测试MySQL服务器。 以下代码在严格测试JAVA应用程序时工作正常。 import java.sql.*; public class MySQL{ public static void main(String[] args) { System.out.println(“MySQL Connect Example.”); Connection conn = null; String url = “jdbc:mysql://localhost:3306/”; String dbName = “database”; String driver = “com.mysql.jdbc.Driver”; String userName = “root”; String password = “”; try { Class.forName(driver).newInstance(); conn = DriverManager.getConnection(url+dbName,userName,password); System.out.println(“Connected to the database”); conn.close(); System.out.println(“Disconnected […]