Tag: sql

不关闭我的JDBC PreparedStatements会导致内存泄漏吗?

我正在使用java.sql PreparedStatements,我想知道以下内容: 在Java中是Pass-by-Value,Dammit! ,以下是Java的Pass-By约定的示例: public void foo(Dog d) { d = new Dog(“Fifi”); // creating the “Fifi” dog } Dog aDog = new Dog(“Max”); // creating the “Max” dog // at this point, aDog points to the “Max” dog foo(aDog); // aDog still points to the “Max” dog 在我的代码中,这出现如下(半Java伪代码): public void method() { PreparedStatement pstmt […]

Java不运行带参数的prepare语句

我正在使用PreparedStatement查询我的表。 不幸的是,我无法这样做。 我的代码就像这样简单: PreparedStatement preparedStatement = connection.prepareStatement( “Select favoritefood from favoritefoods where catname = ?”); preparedStatement.setString(1, “Cappuccino”); ResultSet resultSet = preparedStatement.executeQuery(); 抛出的错误是java.sql.SQLException: ORA-00911: invalid character 。 好像它永远不会通过给定的参数运行。 谢谢你的时间。 我花了一天时间来调试这个但仍然不成功。 如Piyush所述,如果我在语句结尾处省略分号,则会抛出新错误。 java.sql.SQLException: ORA-00942: table or view does not exist 。 但我可以向你保证,这张桌子确实存在。 UPDATE 射击。 我编辑了错误的sql。 现在它成功了。 你的时间。

Wildfly 10无法在启动时加载MySQL XA驱动程序

我有一个我在wildfly-10.0.0中部署的Web应用程序。 它需要一个mysql xa驱动程序。 我有以下错误: 2015-10-13 12:25:37,979 ERROR [org.jboss.as.controller.management-operation](ServerService线程池 – 33)WFLYCTL0013:操作(“添加”)失败 – 地址:([(“子系统”) >“datasources”),(“jdbc-driver”=>“com.mysql”)]) – 失败描述:“WFLYJCA0041:无法为驱动程序[com.mysql]加载模块” modules目录如下: Directory of C:\Users\rball\Documents\Dev\WildFly\wildfly-10.0.0.CR1\modules\sy stem\layers\base\com\mysql\main 10/13/2015 11:32 AM . 10/13/2015 11:32 AM .. 10/13/2015 12:25 PM 1,575 module.xml 03/17/2015 05:21 AM 968,670 mysql-connector-java-5.1.35-bin.jar module.xml文件是: 我将驱动程序和数据源添加到standalone.xml的datasources部分: jdbc:mysql://localhost:3306/temp?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8 com.mysql.jdbc.jdbc2.optional.MysqlXADataSource com.mysql 10 20 false false false false root password false false 1000 0 […]

一次使用固定数量的结果流式传输MySql ResultSet

我有16百万条记录的MySql表,因为一些迁移工作我正在阅读整个Mysql表。 以下代码用于在MySql中流式传输大型ResultSet statement = connection.createStatement( java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY); statement.setFetchSize(Integer.MIN_VALUE); 但这是一次流式传输一个结果,这是否意味着我们每行都要访问MySql服务器 使用流媒体时我们可以设置类似这样的语句.setFetchSize(1000); 我希望在流式传输大型ResultSet时减少到服务器的往返次数

为什么hibernate在插入和删除操作期间会生成’T_’前缀tableName?

数据库:ORACLE 我们在hibernate和hbm文件中使用ImprovedNamingStrategy,我们明确地给出了表名。 但是,仍然,在删除和插入操作期间,它生成’T_’作为前缀,’HT_’作为一些表的前缀。 这导致SQLGrammarException: org.hibernate.exception.SQLGrammarException:无法执行语句 请注意,使用Oracle数据库时会发生这种情况,HSQL或Postgres不会发生这种情况。

带SQL的JAVA:insert命令的返回值?

我有一个作者表:authorID,authorName。 authorID是一个带自动增量的pk。 我想在java中编写一个从用户获取名称并将其添加到表中的方法。 但是我需要返回作者的id。 有没有办法用1 sql语句做到这一点? 例如,如果我的代码有命令: stmt.executeUpdate(“INSERT INTO authors ” + “VALUES (, ‘”+ string.get(1) +”‘)”); 其中string.get(1)是作者姓名。 现在,如果我写: ResultSet rs =stmt.executeUpdate(“INSERT INTO authors ” + “VALUES (, ‘”+ string.get(1) +”‘)”); 它表示错误,因为rs是结果集,但返回的值是int。 这是我插入的行的pk吗?

如何从使用该程序的人隐藏MySQL数据库的密码

我用JDBC创建了一个java程序,它成功连接到我的计算机服务器的MySQL数据库,如下所示: try { // The newInstance() call is a work around for some // broken Java implementations Class.forName(“com.mysql.jdbc.Driver”).newInstance(); } catch (Exception ex) { // handle the error } try { conn = DriverManager.getConnection((“jdbc:mysql://191.168.1.15:3306/databasename”), “username”, “password”); // Do something with the Connection } catch (SQLException ex) { // handle any errors System.out.println(“SQLException: ” + ex.getMessage()); System.out.println(“SQLState: […]

Hibernate @Where子句

我有User类,它有组。 @Where(clause = “enabled = 1 and deleted = 0”) @Fetch(FetchMode.SUBSELECT) public Set getGroups() { return groups; } 但是当我试图在已经存储在DB中并且不适合@Where子句的Group上进行某些操作时,Hibernate只是忽略了我。 实际上, @Where我不是我的决定,但我能找到克服这一点的解决方案(创建另一个dao方法来执行某些操作)是如此丑陋。 那么,有没有办法克服这个? 还是我错过了什么? 谢谢您的帮助。

Java char 数组jPasswordField处理和SQL更新语句

TLDR; 是通过String类以String.valueOf(charArray);的forms解析char数组String.valueOf(charArray); 比制作​​String类的对象更安全吗? 我正在尝试理解/扩展其中的讨论: 为什么char []首选String而不是密码? 我刚刚读了很多关于如何在Java中“安全地”处理密码的问题,但仍有一个问题我不太清楚如何解决。 当您从jPasswordField获取密码时,它将作为一个字符数组。 这很好,因为你可以更容易用零覆盖数组,而不是等待垃圾收集器来清除像字符串等诸如此类的东西。 我的问题在于:当我想在SQL中运行更新语句来更新密码时,我根本无法输入字符数组,因为格式错误。 当我做像Arrays.toString(arrayName); 我用格式得到它: [e, a, c, h, o, f, t, h, e, l, e, t, t, e, r, s] 我可以将它放入数据库列的唯一方法是……让我们说VARCHAR(100)没有所有的逗号和空格似乎是这样写的: String stringPassword=””; int i=0; for(char a:newPassword){ stringPassword=stringPassword+newPassword[i]; i++; } 如果我做这样的事情,我是否已经破坏了使用字符数组的全部意义? 谷歌搜索并没有真正帮助我解决这个问题。 在此先感谢您的时间。 编辑1:感谢KKaar提供可能的解决方案: char[] passwordArray; String.valueOf(passwordArray); 这对于我需要它的目的来说效果很好,但是我仍然不知道它是否安全。 如果我在preparedStatement语法中创建String.valueOf(passwordArray) ,它不会生成变量,但它仍然通过String类解析值。 这是否意味着它仍处于危险之中,还是安全的?

如何在Jooq处理日期?

当我们使用普通JDBC连接时,我们使用下面的代码来格式化日期或转换日期 if(argDB.equals(“Oracle”)){ sb.append(” AND TO_CHAR(PaymentDate, ‘YYYY-MM-DD’) <= TO_CHAR(SYSDATE,'YYYY-MM-DD')"); } else { sb.append(" AND CONVERT(VARCHAR(8), PaymentDate, 112) <= CONVERT(varchar(8), dbo.getdate(), 112)"); } 现在我们正在使用JOOQ你认为我们必须像以前一样转换日期,否则JOOQ可以在内部处理这类问题。 正如我现在检查的那样JOOQ不支持Oracle和Lukas的TO_CHAR方法给出了一些替代方法