Tag: prepared statement

一批中有两种不同的预处理语句

我想在一个批次中发送两个不同的预备语句 。 目前我在两个中这样做,你可以在注释行中看到并且它有效,但这不是这里的主要目标。 任何人都可以告诉我应该用什么来代替这些评论才能使这个东西起作用? import java.lang.ClassNotFoundException; import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.DriverManager; public class Main { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatementWithdraw = null; PreparedStatement preparedStatementDeposit = null; try { Class.forName(“com.mysql.jdbc.Driver”); connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/youtube”, “root”, “root”); preparedStatementWithdraw = withdrawFromChecking(connection, preparedStatementWithdraw, new BigDecimal(100), 1); preparedStatementDeposit = […]

如何使用预准备语句设置当前日期和时间?

我在数据库中有一个数据类型为DATETIME的列。 我想使用`PreparedStatement将此列值设置为当前日期和时间。 我怎么做?

oracle jdbc中的PreparedStatement和setTimestamp

我在where子句中使用PreparedStatement和Timestamp: PreparedStatement s=c.prepareStatement(“select value,utctimestamp from t where utctimestamp>=? and utctimestamp<?"); s.setTimestamp(1, new Timestamp(1273017600000L)); //2010-05-05 00:00 GMT s.setTimestamp(2, new Timestamp(1273104000000L)); //2010-05-06 00:00 GMT ResultSet rs = s.executeQuery(); if(rs.next()) System.out.println(rs.getInt("value")); 当我在客户端计算机上有不同的时区时,我得到的结果是不同的。 这是Oracle jdbc中的错误吗? 还是纠正行为? Oracle数据库版本是10.2,我已经尝试使用oracle jdbc瘦驱动程序版本10.2和11.1。 参数是Timestamp,我预计在途中不会进行任何时间转换。 数据库列类型是DATE,但我也使用TIMESTAMP列类型检查它,结果相同。 有没有办法达到正确的结果? 我无法将整个应用程序中的默认时区更改为UTC。 谢谢你的帮助

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 […]

JDBC准备好的声明。 setDate(…)不保存时间,只保存日期..我怎样才能节省时间?

我有以下查询: INSERT INTO users (user_id, date_created) VALUES (?,?) 我有以下准备好的声明 PreparedStatement insertUser = dbConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); insertUser.setInt(1, 7); java.util.Date now = new java.util.Date(System.currentTimeMillis()); insertUser.setDate(2, new java.sql.Date((new Date(System.currentTimeMillis())).getTime())); insertUser.executeUpdate(); 如果我检查数据库,我发现它只插入今天的日期而不是时间,所以它将是: 2011-07-29 00:00:00 我应该在setDate()加入什么来获得时间?

Oracle在Java中的RETURNING INTO使用(JDBC,Prepared Statement)

我正在使用JDBC来执行如下所示的Oracle语句: “INSERT INTO MYTABLE(MYDATA) VALUES(?) RETURNING MY_CALCULATED_DATA INTO ?” // MYTABLE’s def makes MY_CALCULATED_DATA be auto-generated by DB on insert 我找到了几种在Java中调用上述语句的方法,主要是: 使用OraclePreparedStatement: ps = (OraclePreparedStatement)conn.prepareStatement(sql); ps.setString(1, “myvalue”); ps.registerReturnParameter(2, Types.VARCHAR); ps.execute(); rs = ps.getReturnResultSet(); rs.next(); System.out.print(rs.getString(1)); 使用CallableStatement: cs = conn.prepareCall(sql); cs.setString(1, “myvalue”); cs.registerOutParameter(2, Types.VARCHAR); cs.execute(); System.out.print(cs.getString(1)); 问题: 方法#2抛出“SQLException:并非所有返回参数都已注册” , 但是 ,如果我将SQL语句包装成“ BEGIN..END; ” – 则方法#2工作正常。 为什么方法#1在没有“ […]

如何在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); […]

将列名称作为PreparedStatement的输入参数

我已经在这里(以及其他论坛)使用了搜索,但是没有找到我正在尝试的答案。 我知道它可以通过其他方式轻松完成,这只是一个小沙箱框架,我正在为大学课程编写代码……在真实环境中,我只需要Spring,Hibernate等。 所以我所做的就是用POJO编写一个小的通用数据访问层,使用通用方法检索,检查或插入数据到数据库(Oracle)。 其中大部分是通过PreparedStatements完成的。 只要我没有连接,这是有效的…是否可以将列作为参数放入? 例: Table A has Attribute X + others Table B has Attribute Y + others PreparedStatement查询SELECT * FROM A,B WHERE “A”.”X” = ? 然后填写“B”。“Y”作为参数…… 数据库不会抛出错误或exception,但执行语句后返回的ResultSet为空。 这是不可能的,还是我只是错过了一些逃脱? 我正在使用PreparedStatement.setString(int index, String value)来填充参数…缺乏想法我可以使用其他setX方法… 同样,在一个真实的项目中,我永远不会自己编写代码,而是使用类似Spring或Hibernate的东西,而不是重新发明轮子,但我认为这是一个有趣的练习,可以自己编写这样一个通用的小数据访问层。

Java的PreparedStatement如何工作?

我计划用PreparedStatement对象替换重复执行的Statement对象以提高性能。 我正在使用像MySQL函数now()和字符串变量这样的参数。 我见过的大多数PreparedStatement查询包含常量值(如10 ,字符串如”New York” )作为参数用于? 在查询中。 我将如何使用now()等函数和变量作为参数? 是否有必要使用? s在查询而不是实际值? 我很困惑。

使用预准备语句批量更新在Java中批量插入

我试图用Java填充一个带有大约50,000行10列的结果集,然后使用PreparedStatement的batchExecute方法将它们插入到另一个表中。 为了使这个过程更快,我做了一些研究,发现在将数据读入resultSet时,fetchSize起着重要的作用。 拥有一个非常低的fetchSize可能导致太多的服务器访问,并且非常高的fetchSize可以阻止网络资源,所以我尝试了一点,并设置了适合我的基础设施的最佳大小。 我正在读取此resultSet并创建插入语句以插入到另一个数据库的另一个表中。 像这样的东西(只是一个样本,而不是真正的代码): for (i=0 ; i<=50000 ; i++) { statement.setString(1, "a@a.com"); statement.setLong(2, 1); statement.addBatch(); } statement.executeBatch(); executeBatch方法是否会尝试一次发送所有数据? 有没有办法定义批量大小? 有没有更好的方法来加快批量插入的过程? 批量更新(50,000行10列)时,使用可更新的ResultSet或PreparedStaement与批量执行是否更好?