Tag: prepared statement

使用java jdbc和prepared语句的CREATE DATABASE查询返回语法错误

我试图让Java使用JDBC创建数据库但我得到语法错误,尽管查询是正确的。 例如,如果我明确地将数据库的名称写入代码中,它就可以正常工作。 这是我的代码: package mysql_manipulator; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class Create { private static final String driver = “com.mysql.jdbc.Driver”, url = “jdbc:mysql://localhost”, username = “dylan”, password = “******”; private String databaseName; public Create (){ this.databaseName = null; } public String getDatabaseName() { return databaseName; } public void setDatabaseName(String databaseName) { this.databaseName = […]

在prepare语句中传递数组参数 – 获取“java.sql.SQLFeatureNotSupportedException”

我在我的prepare语句中遇到错误java.sql.SQLFeatureNotSupportedException。 我正在使用Mysql数据库。 以下是我的代码。 class tmp { public static void main(String arg[]) { try { Class.forName(“com.mysql.jdbc.Driver”); Connection conn = DriverManager.getConnection( “jdbc:mysql://localhost/sample”, “root”, “root”); PreparedStatement pst = conn .prepareStatement(“select * from userinfo where firstname in(?)”); String[] Parameter = { “user1”, “Administrator” }; Array sqlArray = conn.createArrayOf(“VARCHAR”, Parameter); pst.setArray(1, sqlArray); ResultSet rs = pst.executeQuery(); while (rs.next()) { System.out.println(rs.getInt(1)); […]

如何使用java设置完整的日期和时间sql,而不仅仅是日期?

我正在尝试使用java在我的数据库中设置时间戳,但是在我的表中我得到的是日期,没有时间(即,看起来像“2010-09-09 00:00:00”)。 我在我的mysql数据库上使用datetime字段(因为看起来 datetime比timestamp更常见 )。 我设置日期的代码如下所示: PreparedStatement ps = conn.prepareStatement(“INSERT INTO mytable (datetime_field) VALUES (?)”) java.util.Date today = new java.util.Date(); java.sql.Date timestamp = new java.sql.Date(today.getTime()); ps.setDate(1, timestamp); ps.executeUpdate(); 如何设置包含时间的日期? 编辑:我按照下面的说法更改了代码,并设置了日期和时间。 PreparedStatement ps = conn.prepareStatement(“INSERT INTO mytable (datetime_field) VALUES (?)”) java.util.Date today = new java.util.Date(); java.sql.Timestamp timestamp = new java.sql.Timestamp(today.getTime()); ps.setTimestamp(1, timestamp); ps.executeUpdate();

我应该首先关闭哪个,PreparedStatement还是Connection?

在JDBC中使用PreparedStatement时,我应该首先关闭PreparedStatement还是首先关闭Connection ? 我刚看到一个代码示例,其中Connection首先被关闭,但在我看来首先关闭PreparedStatement更合乎逻辑。 是否有标准的,可接受的方式来做到这一点? 有关系吗? 关闭Connection还会导致PreparedStatement关闭,因为PreparedStatement与Connection对象直接相关吗?

使用Java记录PreparedStatements

总是很痛苦的一件事是当你有PreparedStatement而不是查询本身时记录SQL(JDBC)错误。 你总是得到如下消息: 2008-10-20 09:19:48,114 ERROR LoggingQueueConsumer-52 [Logger.error:168] Error executing SQL: [INSERT INTO private_rooms_bans (room_id, name, user_id, msisdn, nickname) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE room_id = ?, name = ?, user_id = ?, msisdn = ?, nickname = ?] 当然,我可以编写一个辅助方法来检索值并用真实值解析/替换问号(如果我没有得到这个问题的结果,可能会沿着这条路走下去),但我只是想知道是否这个问题之前由其他人解决了和/或是否有任何通用的日志记录助手可以自动为我做这件事。 几个答案后编辑: 到目前为止提供的库似乎适合于记录调试语句,这无疑是有用的。 但是,我正在寻找一种方法来获取PreparedStatement本身(不是某些子类)并在发生错误时记录其SQL语句。 我不想部署具有PreparedStatement备用实现的生产应用程序。 我想我正在寻找一个实用工具类,而不是PreparedStatement专业化。 谢谢!

使用Java的PreparedStatement将数组传递给SQL查询

我使用Java的预处理语句将数组传递给SQL查询时遇到了一些麻烦。 我首先尝试了sourceforge驱动程序,但是当我调用setArray方法时,我会得到AbstractMethodError。 不知道我交换到Microsoft sqlserver驱动程序的解决方案,但现在我完全得到一个不同的错误,即“java.sql.SQLFeatureNotSupportedException:不支持此操作”。 尝试了很多东西来尝试解决这个问题,但似乎没有任何工作可行。 我的Java代码看起来类似于我在这里和互联网上看到的例子,如下所示, PreparedStatement ps = connection.prepareStatement(query); String[] suppliers = {“21″,”2774″,”120563″,”3714″,”59”}; ps.setArray(1, connection.createArrayOf(“text”, suppliers)); ResultSet rs = ps.executeQuery(); 我的SQL查询示例。 真正感兴趣的唯一一条就是前一行,我添加了’?’ 字符,据我所知,它是如何将参数传递给SQL查询。 productsPrices.query = select contract.supplierid as ‘hotelid’ \ , round((rate.s1/money.buy)*euro.sell,0) as “single” \ , round((rate.s2/money.buy)*euro.sell,0) as “double” \ ,service.Name as ‘roomtype’ \ ,stock.alloc – stock.taken as ‘stock.available’ \ , contract.notes as ‘boardType’ […]

是否有理由永远不关闭JDBC连接?

我正在读取上一个开发人员的代码,他从不关闭与数据库的任何连接。 他只关闭PreparedStatement和ResultSet连接,但从不关闭Connection。 系统不使用连接池。 是否有任何理由不关闭所有内容( Connection , PreparedStatement和ResultSet )?

针对Oracle的Java中的PreparedStatement问题

出于安全性和性能原因,我正在修改一些代码以使用preparedStatement而不是普通的Statement。 我们的应用程序目前正在将信息存储到嵌入式德比数据库中,但我们很快将转向Oracle。 关于Oracle和Prepared Statement,我发现了两件我需要你帮助的人: 1-我发现这个文件说Oracle没有将绑定参数处理成IN子句,所以我们不能提供如下查询: Select pokemon from pokemonTable where capacity in (?,?,?,?) 真的吗 ? 有没有解决方法? ……为什么? 2-我们有一些TIMESTAMP类型的字段。 因此,使用我们的实际Statement,查询如下所示: Select raichu from pokemonTable where evolution = TO_TIMESTAMP(‘2500-12-31 00:00:00.000’, ‘YYYY-MM-DD HH24:MI:SS.FF’) 准备好的声明应该怎么办? 我应该输入参数数组:2500-12-31或TO_TIMESTAMP(’2500-12-31 00:00:00.000’,’YYYY-MM-DD HH24:MI:SS.FF’)? 谢谢你的帮助,我希望我的问题很明确! 问候,

添加具有已排序的主键和外键JDBC的列的行

我的程序有一个添加项目和完成交易选项。 FinishTransaction类要求用户输入客户的信息,付款方式和付款。 总付款显示在窗口中。 当用户单击结帐按钮时,数据应从CUSTOMER表(插入客户信息), ORDERS表(插入项目的信息)和TRANSACTION表(插入交易信息)中传输。 事务表有一列TRANS_CUSTNUM ,它是一个引用CUSTOMER表中CUST_NUM的外键。 我的程序工作正常,除了TRANSACTION表。 它不会在我的SQL开发人员中添加一行。 您认为我的代码有什么问题? import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.awt.event.ActionListener; import java.sql.*; import java.util.logging.*; public class FinishTransaction extends JFrame implements ActionListener{ JLabel totalLabel; JLabel nameLabel; JLabel addressLabel; JLabel contactLabel; JLabel custPaymentLabel; JLabel methodLabel; JLabel creditCardLabel; JTextField totalTextField; JTextField nameTextField; JTextField addressTextField; JTextField contactTextField; JTextField custPaymentTextField; JTextField creditCardTextField; […]

JDBC,MySQL:将位转换为BIT(M!= 1)列

我是使用JDBC + MySQL的新手。 我有几个1/0值,我想用PreparedStatement粘贴到数据库中。 目标列是BIT(M!= 1)。 我不清楚使用哪种setXXX方法。 我可以很容易地找到数据出来的参考资料,但它是如何进入我的。 这些值有效地作为应用程序使用的对象中有序的布尔集合。 另外,我偶尔会从1/0字符的平面文本文件中导入数据。