Tag: sql

如何在oracle中将表作为out参数

我试图将oracle过程调用的out参数强制转换为对象。 它不起作用,因为 – 据我所知 – 我需要定义一个地图,它告诉方法如何施放它。 如果地图是空的或不正确的填充,它默认为STRUCT类型的Objekt – 这在我的情况下是错误的。 我已经构建了一个示例,它应该说明问题: — Procedure in database PROCEDURE myprocedure ( inputParam IN VARCHAR2 (4), outputOne OUT outputOneSQLType outputTwo OUT outputTwoSQLType); — inside of a package inside a package mypackage — first type create or replace TYPE outputOneSQLType IS TABLE OF tableOneExample — table of type create or replace […]

从Java调用PL / SQL函数时的“SQLException:ORA-06550”

我想使用Java从数据库中检索数据并显示它,所以我创建了这个PL / SQL函数,它返回一个游标: create or replace function std_getInfoFunc return types.cursortype as my_cursor types.cursorType; begin open my_cursor FOR SELECT s.FirstName, s.LastName, s.Address, s.City, s.Province , s.PostalCode, c.CourseName FROM Students s, Courses c, StudentAndCourses cs Where s.StudentID = cs.StudentID AND c.CourseID = cs.CourseID; Return my_cursor; end; 在我的Java代码中,我调用函数如下: try{ CallableStatement cst=connection.prepareCall(“{? = call std_getInfoFunc}”); cst.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); cst.execute(); res=(ResultSet) […]

如何从XML文件中读取数据并将其存储到数据库(MySQL)中?

我需要从XML文件中获取数据并将其存储到MySQL数据库中。 我正在考虑使用SAX Parser来解析数据,但我不确定如何有效地将数据存储到数据库中,我想到的是像JDBC和Hibernate这样的技术,但是我想问一下有效的方法是什么它? 注意:这里的编程语言是Java。

为什么spring jdbcTemplate batchUpdate逐行插入

我有200K行插入一个数据库表中。 我试图在spring中使用jdbcTemplate.batchUpdate ,以便每批次插入10,000个。 但是,此过程会消耗太多时间(对于200K行,为7分钟)。 所以在数据库方面,我检查了select count(*) from table_X插入的行select count(*) from table_X 。 我发现行数略有增加,预计为10K。 任何人都可以解释是什么原因或者是应该在数据库端配置的东西吗? PS:我正在使用sybase ….

如何使SQL连接语句通用

我必须在同一个类的不同方法中执行几个SQL查询。 有没有办法使这些语句通用,我可以在所有方法中使用相同的con,语句变量来执行查询。 Class.forName(“com.mysql.jdbc.Driver”).newInstance(); Connection con = DriverManager.getConnection (“jdbc:mysql://localhost:3306/kamal”,”root”,”root”); Statement statement=con.createStatement();

getResultSet()“每个结果应该只调用一次”

根据java.sql.Statement getResultSet的文档 ,它说: 以ResultSet对象的forms检索当前结果。 每个结果只应调用一次此方法。 使用一些测试代码,我运行了executeQuery()和几次调用getResultSet()并观察到返回的ResultSet指向同一个对象。 所以我猜它没有返回你需要单独关闭的不同ResultSet 。 但当然这对我的JDBC驱动程序来说可能是独一无二的。 查看ResultSet的文档 ,它说: 默认的ResultSet对象不可更新,并且只有一个向前移动的游标。 因此,您只能迭代一次,并且只能从第一行到最后一行。 这似乎是一个很好的理由,为什么多次调用它可能不是一个好主意,因为它可能导致一些“陷阱”的情况。 如果这是唯一的原因,我觉得他们可能刚刚说过,所以我认为可能还有更多不仅仅是这个。 那么有谁知道为什么每个结果不应该多次调用getResultSet ? 这个问题首先让我好奇。

停止非循环Java线程

这可能是我误解我所读到的内容的一个例子,但是用Java杀死一个线程的所有例子似乎表明你必须发出一个线程来自杀; 没有一些严重的风险,你不能从外面杀死它。 问题是,所有关于如何“礼貌地”要求线程死亡的例子都有某种循环,所以你要做的就是在每次迭代时都看一个标志。 所以,我得到的是一个线程,它只需要一段时间(一系列SQL查询)。 我当然可以在每一步之后进行检查,但它们不是在一个循环中,并且我没有一种非常优雅的方式可以解决这个问题。 这是我正在做的一个例子: new Thread(new Runnable(){ public void run(){ //query 1 Connection conn = db.getConnection(); Statement s = conn.createStatement(); ResultSet rs = s.executeQuery(“SELECT …”); while(rs.next()){ //do stuff } //query 2 rs = s.executeQuery(“SELECT …”); while(rs.next()){ //do stuff } //query 3 rs = s.executeQuery(“SELECT …”); while(rs.next()){ //do stuff } } }).start(); 这是一个例子,我不使用匿名内部类,但它说明我的run()方法不能优雅地停止自己。 此外,即使我在每个步骤之后检查,如果特定查询需要很长时间才能运行,则此代码将无法在查询完成之后停止。 […]

JPA本机查询中的位置参数问题

我正在尝试: String sql = “SELECT email FROM users WHERE (type like ‘B’) AND (username like ‘?1’)”; List results = em.createNativeQuery(sql).setParameter(1, username).getResultList(); 但我得到IllegalArgumentException,它告诉我参数超出范围。 我究竟做错了什么?

Hibernate使用条件执行更新

在Hibernate使用Criteria是否可以执行更新? 例如: Session session = getSession(); Criteria crit = session.createCriteria(User.class); crit.add(Restrictions.eq(“token”, sessionToken)); User user= new User(); Transaction tx = session.getTransaction(); try { tx.begin(); session.updateWithCriteria(user, crit); //my imaginary function tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } session.close();

Java:插入表日期时间数据

我试图在MS-SQL数据库中插入一个变量当前的日期和时间。 我用这种格式: DateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”); Calendar cal = Calendar.getInstance(); System.out.println(dateFormat.format(cal.getTime())); 我得到了这个结果2013-01-28 09:29:37.941 我在数据库中的字段是定义datetime ,正如我在其他具有相同字段的表中看到的那样,日期和时间的编写方式与2011-07-05 14:18:33.000完全相同。 我尝试使用我在java程序中执行的查询插入数据库,但是我收到此错误 SQLexception:状态:S0003消息:将varchar数据类型转换为值的日期时间数据类型超出范围。 错误:242 我的查询是这样的: query = “INSERT INTO Companies CreatedOn”+ “VALUES (‘” + dateFormat.format(cal.getTime()) + “‘)” 但我不明白我做错了什么。