Tag: sql

MySQL datetime没有返回时间

我有一个MySQL数据库,其中包含一个包含datetime列的表。 但是,我无法在Java中找到一种方法将其作为Java中的某种Time对象返回。 我可以调用resultset.getString(“Date”)并返回datetime ,但这并不好,因为没有办法比较字符串上的日期等。 我也可以调用resultset.getDate(“Date”) ,但这根本不会返回时间。

JOOQ中的行级安全性实现

我想使用JOOQ库在Java中实现oracle行级安全类function 以下是JOOQ查询代码的示例: Result result = dslContext.select().from(Employee.EMPLOYEE).fetch(); 上面的代码将生成如下SQL: select [dbo].[Employee].Id,… from [dbo].[Employee] 我想添加一个where子句来过滤特定于用户安全性的数据,如下所示: select [dbo].[Employee].Id,… from [dbo].[Employee] WHERE [dbo].[Employee].Security IN (1,2)

HQL或Criteria中的CASE语句

从这个问题派生出来,是否可以将HQL或Criteria用于以下SQL语句: SELECT e.type, count(e), count(d), count (case when gender = ‘male’ then 1 else NULL end) AS NumberOfMaleEmployees from Department d JOIN d.employees e WHERE e.dead = ‘maybe’ GROUP BY e.type 虽然谷歌提出了一些HQL支持CASE语句的命中,但Hibernate 3.6.6失败了 QuerySyntaxException:意外令牌:CASE 当我在EntityManager实例上创建上面的查询时。 为每个e.type创建另一个查询来手动确定男性的数量,例如对于每个e.type,这有多糟糕。 SELECT count(e), from Department d JOIN d.employees e WHERE e.dead = ‘maybe’, e.type = ugly 由于可能有很多类型,这可能很慢。 我想数据库为我做的工作。

让ExecuteBatch更快地执行

我正在尝试从sybase服务器读取表,处理行,并将结果输出到另一个表。 (下面是我的代码) 代码检索表非常快,并且处理速度相同(得到它在30秒内发送的部分)。 但是当我运行执行批处理时,它会在那里停留20分钟(fyi,我有一张表,我正在测试8400行)。 有没有更有效的方法来做到这一点? 我可以接受如何收到或发送查询(我可以创建一个新表,更新表等) – 我只是不知道为什么这么慢(我确定数据<1 MB和我确定它不需要SQL服务器20分钟来解析8400行)。 有任何想法吗? 注意:这对我来说真的很糟糕的原因是我必须解析一个1.2 MM行的表(我正在使用的这个表是一个8400行的测试表) Connection conn = DriverManager.getConnection(conString, user, pass); String sql = “SELECT id,dateid,attr from user.fromtable”; Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); String sqlOut = “INSERT INTO user.mytabletest (id,attr,date,estEndtime) values (?,?,?,?)”; PreparedStatement ps = conn.prepareStatement(sqlOut); int i=1; while(rs.next()) { int date = rs.getInt(“dateid”); String […]

将数据库类型映射到具体的Java类

背景 将列数据类型映射到其对应的Java类。 问题 查询从数据库返回元信息: SELECT rb.object_schema, rb.object_name, rb.column_name FROM dictionary.resource_bundle rb 例如,此查询返回(自引用): dictionary, resource_bundle, column_name 其中’dictionary’是模式名称,’resource_bundle’是object_name,’column_name’是column_name。 做一些像这样的事情会很棒: SELECT rb.object_schema, rb.object_name, rb.column_name, rb.column_type FROM dictionary.resource_bundle rb 并让此查询返回: dictionary, resource_bundle, column_name, varchar 然后使用JDBC发现varchar 映射到java.lang.String 。 问题 在PostgreSQL中,在给定模式名称,对象名称(保证是表或视图)和列名称的情况下,如何确定用于存储数据的类型? 以数据库中立的方式(利用JDBC),如何确定数据库对给定数据类型使用的映射? 谢谢!

JDBC – Statement,PreparedStatement,CallableStatement和缓存

我想知道有什么区别以及何时使用Statement , PreparedStatement和CallableStatement 。 使用这些方法的最佳实践和典型方案是什么?

JDBC:在set条件下:我可以将一个set作为单个param传递吗?

在JDBC中,我可以使用问号作为查询参数,如下所示: “SELECT * FROM users WHERE login = ?” 接着 ps.setString(1, “vasya”); 但是如何查询登录列表: “SELECT * FROM users WHERE login IN ?” 假设,我有 List logins = … 我应该在那里输入什么: ps.setWhat(1, what); 我可以将查询重写为: “SELECT * FROM users WHERE login = ? OR login = ? OR login = ?” 然后在循环中调用setString,但我想知道是否可以在查询中将一组元素作为单个参数传递。 也许有特定于供应商的扩展?

如何通过JDBC使用包含问号“?”的PostgreSQL JSON(B)运算符

PostgreSQL知道一些在其名称中使用问号字符的时髦ASCII艺术运算符,例如这些JSON运算符 : ? 字符串是否作为JSON值中的顶级键存在? ?| 这些数组字符串中是否存在顶级键? ?&所有这些数组字符串都作为顶级键存在吗? 问题是官方PostgreSQL JDBC驱动程序似乎无法正确解析包含此类运算符的SQL字符串。 它假定问号是普通的JDBC绑定变量。 以下代码…… try (PreparedStatement s = c.prepareStatement(“select ‘{}’::jsonb ?| array[‘a’, ‘b’]”); ResultSet rs = s.executeQuery()) { … } …引发exception: org.postgresql.util.PSQLException: Für den Parameter 1 wurde kein Wert angegeben. at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:225) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:190) at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:424) at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:161) at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:114) 我该如何使用此运算符?

带有命名参数的Hibernate Native Query问题

我有Hibernate Native Query的问题。 我有一个选择数组切片的SELECT(PostgreSQL数据库)。 问题是hibernate识别以下部分:“SELECT my_array [1:300] …”中的“:300”作为命名参数,我得到以下exception:并未设置所有命名参数。 我试图用’:’,’::’来逃避冒号(:),但没有成功。 Hibernate版本是3.2

java.sql.SQLException:对用户’root’@’localhost’拒绝访问(使用密码:YES)

为什么你认为这个函数总是让我? 使用另一个具有相同代码结构的登录程序,它可以很好地工作。 我的DBURL是jdbc:mysql:// localhost:8889 / database public String retrieveUserPassword(String userName, String password) { String query = “SELECT UserPassword FROM Access where UserName='”+userName+”‘”; String dbresult=null; //this might be the problem, but I must define it try { Class.forName(“com.mysql.jdbc.Driver”); }catch (ClassNotFoundException ex1) { System.out.println(“Driver could not be loaded: ” + ex1); Logger.getLogger(DatabaseModel.class.getName()).log(Level.SEVERE, null, ex1); } try { […]